我有一个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()只能在数据绑定控件的上下文中使用
如何正确传递?
答案 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 + ");' %>");