如何通过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()等数据绑定方法只能在数据绑定控件的上下文中使用
如何正确传递?
您必须从其他位置的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 + ");' %>");