为Repeater控件中的某个元素动态添加Js函数
<asp:Repeater ID="Repeater1" runat="server" >
<HeaderTemplate>
<table cellspacing="0" cellpadding="4" border="0" id="RGuestBook">
</HeaderTemplate>
<ItemTemplate>
<tr style="background-color:White;">
<td>
<table width="100%" border="0" align="center" >
<tr>
<td>
<asp:TextBox Width="100%" CssClass="contentTB" TextMode="Multiline" style="border:0px" onfocus="focusMe(this)" onmouseover="overMe(this)" onmouseout="outMe(this)" ID="txtReply" runat="server" Text='<%#Eval("F_Reply")%>' onblur="blurAndSaveMe(this,'<%#Eval("F_ID")%>');">
</asp:TextBox>
</td>
</tr>
</table>
</td>
</tr>
</ItemTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
</asp:Repeater>
<HeaderTemplate>
<table cellspacing="0" cellpadding="4" border="0" id="RGuestBook">
</HeaderTemplate>
<ItemTemplate>
<tr style="background-color:White;">
<td>
<table width="100%" border="0" align="center" >
<tr>
<td>
<asp:TextBox Width="100%" CssClass="contentTB" TextMode="Multiline" style="border:0px" onfocus="focusMe(this)" onmouseover="overMe(this)" onmouseout="outMe(this)" ID="txtReply" runat="server" Text='<%#Eval("F_Reply")%>' onblur="blurAndSaveMe(this,'<%#Eval("F_ID")%>');">
</asp:TextBox>
</td>
</tr>
</table>
</td>
</tr>
</ItemTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
</asp:Repeater>
起初,我使用的是在TextBox中使用onblur但是在这里,需要调用一个数据库里的字段,然而这种写法是不对的,onblur="& quot;blurandSaveMe(this,'& lt;%#Eval(& quot;F_ID& quot;)%,当我们查看源文件的时候,我们发现这个Js调用的地方,会转化为这种相应的方法,这样就不能使js函数被正确的调用。
那我们只有采取一种在后台cs文件中动态的添加js函数的方法了。
要采用在后台cs文件中动态的添加js函数的方法,我们首先要添加一个隐藏域
这样前台文件就转变为:
<asp:Repeater ID="Repeater1" runat="server" onitemdatabound="Repeater1_ItemDataBound">
<HeaderTemplate>
<table cellspacing="0" cellpadding="4" border="0" id="RGuestBook">
</HeaderTemplate>
<ItemTemplate>
<tr style="background-color:White;">
<td>
<table width="100%" border="0" align="center" >
<tr>
<td>
<asp:HiddenField ID="HFID" runat="server" Value='<%#Eval("F_ID") %>' />
<asp:TextBox Width="100%" CssClass="contentTB" TextMode="Multiline" style="border:0px" onfocus="focusMe(this)" onmouseover="overMe(this)" onmouseout="outMe(this)" ID="txtReply" runat="server" Text='<%#Eval("F_Reply")%>' onblur="blurAndSaveMe(this,'<%#Eval("F_ID")%>');">
</asp:TextBox>
</td>
</tr>
</table>
</td>
</tr>
</ItemTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
</asp:Repeater>
<HeaderTemplate>
<table cellspacing="0" cellpadding="4" border="0" id="RGuestBook">
</HeaderTemplate>
<ItemTemplate>
<tr style="background-color:White;">
<td>
<table width="100%" border="0" align="center" >
<tr>
<td>
<asp:HiddenField ID="HFID" runat="server" Value='<%#Eval("F_ID") %>' />
<asp:TextBox Width="100%" CssClass="contentTB" TextMode="Multiline" style="border:0px" onfocus="focusMe(this)" onmouseover="overMe(this)" onmouseout="outMe(this)" ID="txtReply" runat="server" Text='<%#Eval("F_Reply")%>' onblur="blurAndSaveMe(this,'<%#Eval("F_ID")%>');">
</asp:TextBox>
</td>
</tr>
</table>
</td>
</tr>
</ItemTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
</asp:Repeater>
然后我们在后台文件中添加一个 Repeater1_ItemDataBound 绑定事件,这个事件在ItemTemplate中的行绑定数据时发生。
protected void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.AlternatingItem || e.Item.ItemType == ListItemType.Item)
{
TextBox _textbox = e.Item.FindControl("txtReply") as TextBox;
HiddenField _id = e.Item.FindControl("HFID") as HiddenField;
_textbox.Attributes.Add("onblur","blurAndSaveMe(this,'" + _id.Value + "')");
}
}
{
if (e.Item.ItemType == ListItemType.AlternatingItem || e.Item.ItemType == ListItemType.Item)
{
TextBox _textbox = e.Item.FindControl("txtReply") as TextBox;
HiddenField _id = e.Item.FindControl("HFID") as HiddenField;
_textbox.Attributes.Add("onblur","blurAndSaveMe(this,'" + _id.Value + "')");
}
}
//ListItemType.Item 是所有项。
//AlternatingItem 是偶数项。
这样就可以在前台的源文件中 ,看到这个ID为 txtReply的 TextBox中已经有JS函数可以调用了。

浙公网安备 33010602011771号