我在ASP .net 2.0工作。我是学习者。我有一个网格视图,里面有一个按钮。请在下面找到asp标记
<form id="form1" runat="server">
<div>
<asp:GridView ID="myGridView" runat="server">
<Columns>
<asp:TemplateField>
<ItemTemplate>
<asp:Button CommandName="AddARowBelow" Text="Add A Row Below" runat="server" />
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
</div>
</form>
请找到下面的代码。
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Data; using System.Web.UI.WebControls; namespace GridViewDemo { public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { DataTable dt = new DataTable("myTable"); dt.Columns.Add("col1"); dt.Columns.Add("col2"); dt.Columns.Add("col3"); dt.Rows.Add(1, 2, 3); dt.Rows.Add(1, 2, 3); dt.Rows.Add(1, 2, 3); dt.Rows.Add(1, 2, 3); dt.Rows.Add(1, 2, 3); myGridView.DataSource = dt; myGridView.DataBind(); } protected void myGridView_RowCommand(object sender, GridViewCommandEventArgs e) { } } }
我在想,当我点击命令按钮时,它会激活mygridview_rowcommand(),但它会抛出一个错误,如下所示:
无效的回发或回调参数。使用配置或&lt;%@ Page EnableEventValidation =“true”%&gt;启用事件验证在一个页面中。出于安全考虑,此功能可验证回发或回调事件的参数是否来自最初呈现它们的服务器控件。如果数据有效且符合预期,请使用ClientScriptManager.RegisterForEventValidation方法注册回发或回调数据以进行验证。
任何人都可以告诉我出错的地方吗?
答案 0 :(得分:1)
首先,尝试禁用事件验证并查看结果,因为这是代码中的明显问题。
<%@ Page EnableEventValidation="false" ...
但是,如果您不想重新进行此类攻击,请执行以下操作:
之后,从按钮的属性中删除OnCommand
事件,并将OnRowCommand
事件添加到GridView
本身。
示例:
<asp:GridView OnRowCommand="myGridView_RowCommand">
...
</asp:GridView>
这应该是处理这些命令的正确方法
该按钮必须具有特定 CommandName
才能按预期工作。
See this page了解此问题的可能值和更多解释。该页面上还有一个工作示例,值得您花时间查看。