我有一个 gridview 控件,在我的原始构建中我设置了网格属性:
AutoGenerateSelectButton="True"
这很好,让我能够在我的 gridview 中选择一行时进行回发。然而,我并不高兴,因为它真的不像一个漂亮的列表,我希望用户能够单击行中的任意位置来选择它,而不是必须选择“那个”选择按钮。所以我查看了底层代码,找到了选择按钮调用的函数并将其添加到 RowDataBound 事件中:
protected void grid_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
e.Row.Attributes.Add("onclick", "javascript:__doPostBack('grid','Select$" + e.Row.RowIndex + "')");
}
}
太棒了,然后我删除了“选择”按钮,现在我收到了错误
Invalid postback or callback argument. Event validation is enabled using <pages enableEventValidation="true"/> in configuration or <%@ Page EnableEventValidation="true" %> in a page. For security purposes, this feature verifies that arguments to postback or callback events originate from the server control that originally rendered them. If the data is valid and expected, use the ClientScriptManager.RegisterForEventValidation method in order to register the postback or callback data for validation.
好的,所以我在网上进行了研究,发现我需要注册事件(是的,被调用的 javascript 仍然存在)所以我添加了这段代码:
<script runat="server">
protected override void Render(HtmlTextWriter writer)
{
foreach (GridViewRow r in grid.Rows)
{
if (r.RowType == DataControlRowType.DataRow)
{
Page.ClientScript.RegisterForEventValidation(r.UniqueID);
}
}
base.Render(writer);
}
</script>
但我仍然遇到同样的错误。如何正确注册事件以便删除选择按钮?谢谢。
最佳答案
C# 中的解决方案:
protected override void Render(HtmlTextWriter writer) {
foreach (GridViewRow r in gridviewPools.Rows) {
if (r.RowType == DataControlRowType.DataRow) {
Page.ClientScript.RegisterForEventValidation(gridviewPools.UniqueID, "Select$" + r.RowIndex);
}
}
base.Render(writer);
}
关于c# - RegisterForEventValidation .net 3.5 gridview 行,如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5110637/