如何通过attributes.add属性传递Eval方法?

时间:2014-09-01 11:20:44

标签: c# asp.net eval

我有一个Gridview,其中所有行都是文本框,最后一列是一个编辑按钮。所有文本框都有一个调用javascript方法的onclick属性。以下是其中一个文本框的HTML代码:

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

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

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";
            }

但显示错误

  

数据绑定方法(如Eval(),XPath()和Bind()只能在数据绑定控件的上下文中使用

如何正确传递?

2 个答案:

答案 0 :(得分:2)

你必须从sonme其他地方获得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;

答案 1 :(得分: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 + ");' %>");