c#
  • asp.net
  • eval
  • 2014-09-01 33 views 0 likes 
    0

    我有一个Gridview的所有行作为文本框和最后一列中的一个编辑按钮。所有的文本框都有一个onclick属性,它调用一个javascript方法。下面是文本框之一的HTML代码:如何通过attributes.add属性传递Eval方法?

    <asp:TextBox ID="txtLoginName" Onclick='<%# "pass(" + Eval("userid") + ");" %>' 
        Text='<%# Eval("LoginName")%>' runat="server"></asp:TextBox> 
    

    当用户点击编辑键,单击属性被删除,按钮变为保存。进行更改后,当用户单击保存时,我想再次重新添加onclick属性。这是我曾尝试的代码:

    数据绑定方法如eval()函数,XPath的(),并绑定()只能在上下文中使用

    protected void btnEdit_Click(object sender, EventArgs e) 
         { 
          Button btn = (Button)sender; 
          GridViewRow row = (GridViewRow)btn.NamingContainer; 
          TextBox lstTxt = (TextBox)row.FindControl("txtLoginName"); 
          if (btn.Text == "Edit") 
          { 
           lstTxt.Attributes.Remove("onclick"); 
           btn.Text = "Save"; 
          } 
          else 
          { 
           lstTxt.Attributes.Add("onclick", "<%# 'pass(" + Eval("userid") + ");' %>"); 
           btn.Text = "Edit"; 
          } 
    

    但其示出了错误一个数据绑定控件

    如何正确传递?

    +0

    的用户ID是列在GridView控件??? – 2014-09-01 11:23:08

    +0

    @Ganesh_Devlekar没有从gridview绑定到的数据库的列。 – nitinvertigo 2014-09-01 11:24:06

    回答

    2

    你必须从其他地方得到userid。您可以将其存储在例如HiddenField或隐形标签中,并使用e.Row.FindControl来获得此控件。另一种方法是使用按钮的CommandArgument

    ASPX:

    <asp:Button ID="btnEdit" runat="server" CommandName="Edit" CommandArgument='<%# Eval("userid") %>'> 
    

    代码隐藏:

    string userID = btn.CommandArgument.ToString(); 
    lstTxt.Attributes.Add("onclick", "pass(" + userID + ");"); 
    

    这是一个像HiddenField控制的方法:

    <asp:TemplateField HeaderText="UserID" Visible="false"> 
    <ItemTemplate> 
        <asp:HiddenField ID="HidUserID" Value='<%#Eval("userid") %>' runat="server" /> 
    </ItemTemplate> 
    </asp:TemplateField> 
    

    现在你可以从代码隐藏通过FindControl得到它:

    HiddenField hidUserID = (HiddenField)e.Row.FindControl("HidUserID"); 
    string userID = hidUserID.Value; 
    
    +0

    实际上,当用户单击文本框时,需要填充另外两个GridView。为此,我使用hiddenfield并使用它的值填充其他gridviews – nitinvertigo 2014-09-01 11:35:15

    +0

    嗨,我已经使用了commandargument方法,它完美地工作。唯一的不是传递“<%#”pass(“+ userID +”);' %>“我通过了”pass(“+ userID +”);“在属性.add中。请更新您的答案,以便我可以标记它。 – nitinvertigo 2014-09-01 11:49:58

    +0

    @nitinvertigo:哎呀,当然,这是一个复制粘贴问题。我纠正了它。 – 2014-09-01 11:55:04

    1

    你可以使用这样的:

    使用它在网格视图模板场

    <asp:TemplateField HeaderText="userid" Visible="false"> 
    <ItemTemplate> 
    <asp:Label runat="server" id="lblUserid" style="display:none" Text='<%# Eval("UserID") %>' /> 
    </ItemTemplate> 
    
    </asp:TemplateField> 
    

    发现后面的代码

    GridViewRow row = (GridViewRow)btn.NamingContainer; 
          Label lbl = (TextBox)row.FindControl("lblUserid"); 
    string userid=lblUserid.Text; 
    lstTxt.Attributes.Add("onclick", "<%# 'pass(" + userid + ");' %>"); 
    
    +0

    嗨,我已经使用Tim提出的commandargument方法,它的工作原理。有一件事是你不能像“<%#”pass(“+ userid +”);' %>”。而是像“pass(”+ userID +“)”传递它;“那么它的工作。谢谢你的答案 – nitinvertigo 2014-09-01 11:52:35

    +0

    我用'userID'作为'userID'它会根据我的代码显示错误,因为C#区分大小写。 – 2014-09-01 11:57:24

    +0

    对不起我的错误。是的,你是对的,它应该是两个用户 – nitinvertigo 2014-09-01 12:18:47

    相关问题