页面一定要继承ICallbackEventHandler接口,这个接口要实现RaiseCallbackEvent()方法:
一、C#代码
public partial class CompCourseOrder_Edit : System.Web.UI.Page, ICallbackEventHandler
{
protected void Page_Load(object sender, EventArgs e)
{
}
//绑定数据
private void BindingData()
{
List<CompCourseBooking> listBooking = BookingSRV.GetCompCourseBookingListByOrderID(HttpContextUtility.GetCurrentDataItemID());
this.rep_edit.DataSource = listBooking;
this.rep_edit.DataBind();
foreach (RepeaterItem item in this.rep_edit.Items)
{
DropDownList ddlTeacher = item.FindControl("ddl_Teacher") as DropDownList;
ddlTeacher.DataBind(listTeacher, t => t.NameEN, t => t.ID.ToString());
ddlTeacher.Items.Insert(0, new ListItem("<- 選擇導師 ->", ""));
ddlTeacher.Attributes["onchange"] = "onChangeBooking(" + item.ItemIndex + ");";
GroupDownList gdlCenterRoom = item.FindControl("gdl_CenterRoom") as GroupDownList;
gdlCenterRoom.OnClientChange = "onChangeBooking(" + item.ItemIndex + ");";
gdlCenterRoom.DataSource = listRoom.Select(t => { return new { GroupTextField = t.CenterName, DataValueField = t.ID.ToString(), DataTextField = t.RoomName }; }).ToList();
gdlCenterRoom.GroupTextField = "GroupTextField";
gdlCenterRoom.DataTextField = "DataTextField";
gdlCenterRoom.DataValueField = "DataValueField";
gdlCenterRoom.DataBind();
DatePicker dateBookingDate = item.FindControl("date_StartBookingDate") as DatePicker;
dateBookingDate.OnClientChange = "onChangeBooking(" + item.ItemIndex + ");";
}
}
#region 回發機制
string returnValue = string.Empty;
public string GetCallbackResult()
{
return this.returnValue;
}
public void RaiseCallbackEvent(string eventArgument) //外部传进来的参数
{
this.returnValue = "ABCD";
}
#endregion
}
二、 HTML代码:
<asp:Repeater runat="server" ID="rep_edit">
<ItemTemplate>
<tr class="row" οnclick="OnSelected_DataRow(this)" οnmοusemοve="OnMouseOver_DataRow(this)"
οnmοuseοut="OnMouseOut_DataRow(this)">
<td style="text-align: center">
<%#Container.ItemIndex+1 %>
<asp:HiddenField ID="txt_CompCourseBookingID" runat="server" Value='<%#Eval("td0")%>' />
</td>
<td>
<%#Eval("td1")%>
</td>
<td style="text-align: center;">
<span id="TimeRand_<%#Container.ItemIndex %>">
<%#Eval("td7")%></span>
</td>
<td style="text-align: center;">
<%#Eval("td11")%>
</td>
<td>
<span style="color: Red" id="rowValideInfo_<%#Container.ItemIndex %>">
<%#Eval("td9")%></span>
</td>
</tr>
</ItemTemplate>
</asp:Repeater>
三、 javascript脚本:
<script language="javascript" type="text/javascript">
function onChangeBooking(rowIndex) {
var prefix = "<%=rep_edit.ClientID%>";
var compCourseBookingID = document.getElementById(prefix + "_txt_CompCourseBookingID_" + rowIndex).value;
var teacherID = document.getElementById(prefix + "_ddl_Teacher_" + rowIndex).value;
var roomID = document.getElementById(prefix + "_gdl_CenterRoom_" + rowIndex).value;
var bookingDate = document.getElementById(prefix + "_date_StartBookingDate_" + rowIndex).value;
if (bookingDate=="" || teacherID=="" || roomID=="")
{
return;
}
var args = compCourseBookingID+","+roomID +","+teacherID + "," + bookingDate;
//alert(args);
<%=this.Page.ClientScript.GetCallbackEventReference(this, "args", "getChildItemListCallBackOnClient", "rowIndex")%>;
}
function getChildItemListCallBackOnClient(resultValue, context) {
document.getElementById("TimeRand_"+context).innerHTML=resultValue.split(';')[0];
document.getElementById("rowValideInfo_"+context).innerHTML=resultValue.split(';')[1];
}
</script>