为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>   

起初,我使用的是在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>   

然后我们在后台文件中添加一个 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 + "')");
            }
        }

//ListItemType.Item   是所有项。  
//AlternatingItem   是偶数项。

这样就可以在前台的源文件中 ,看到这个ID为 txtReply的 TextBox中已经有JS函数可以调用了。


posted @ 2008-06-18 10:32  海底的鱼  阅读(2208)  评论(0)    收藏  举报