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

本文关键字:Eval 方法 属性 何通过 attributes add | 更新日期: 2023-09-27 18:20:23

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

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

当用户单击编辑按钮时,onclick属性将被删除,按钮将更改为保存。进行更改后,当用户单击Save时,我想再次添加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()等数据绑定方法只能在数据绑定控件的上下文中使用

如何正确传递?

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

您必须从其他位置的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:从codeehind获得它

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

您可以这样使用:

在网格视图模板字段中使用它

 <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 + ");' %>");