У меня есть командная кнопка внутри сетки.
Я получаю ошибку:
"Недопустимый аргумент обратной передачи или обратного вызова. Проверка события включена с использованием в конфигурации или <% @ Page EnableEventValidation =" true "%> на странице. В целях безопасности эта функция проверяет наличие аргументов для событий обратной передачи или обратного вызова происходят из серверного серверного элемента управления, который первоначально их представил. Если данные действительны и ожидаемы, используйте метод ClientScriptManager.RegisterForEventValidation, чтобы зарегистрировать данные обратной передачи или обратного вызова для проверки. "
Основано на моих исследованиях
О командах списков данных Asp.Net и проверке событий
похоже, что если метод управления событиями указан в элементе управления asp, я не должен получать эту ошибку. решение, указанное в этом посте, указывает на перемещение спецификации события в определение тега управления asp.
Но в моем коде такой проблемы нет, и все же я получаю ошибку такого типа, потому что я указываю свое событие в самом определении элемента управления asp через: OnRowCommand = "GridView1_OnRowCommand"
Как решить проблему БЕЗ отключения уровня страницы EventValidation?
Ниже приведен мой код:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="ProductMaint.aspx.cs" Inherits="Questpond.ProductMaint" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
</head>
<body style="width: 749px; height: 336px;">
<form id="form1" runat="server">
<br />
<asp:GridView ID="grdProducts" runat="server" Width="754px" AutoGenerateColumns="False" Height="40px" >
<Columns>
<asp:TemplateField ShowHeader="False">
<ItemTemplate>
<asp:Button ID="Button1" runat="server" CausesValidation="false" CommandName="Edit"
Text="Edit" OnRowCommand="GridView1_OnRowCommand" CommandArgument='<%# Eval("RW") %>' Value='<%# Eval("RW") %>' />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Inactive">
<ItemTemplate>
<asp:Checkbox ID="Checkbox1" runat="server" CausesValidation="false" CommandName="chkInactive" Checked='<%# Eval("Inactive")%>'
Enabled="false"/>
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="Id" HeaderText="Id" />
<asp:BoundField DataField="Category" HeaderText="Category" />
<asp:BoundField DataField="Description" HeaderText="Description" />
<asp:BoundField DataField="CurrentPrice" HeaderText="Price" />
</Columns>
</asp:GridView>
<asp:Label ID="lblTest" runat="server" Text="Label"></asp:Label>
</form>
</body>
</html>
C # код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using IQBooksBusinessLayerSalesData;
namespace Questpond
{
public partial class ProductMaint : System.Web.UI.Page
{
protected void RefreshGridWithData()
{
DataSet ds;
//works fine if default on screen is nothing and set to exclude deleted rows.
ds = IQBooksBusinessLayerSalesData.IQBooksBusinessLayerSalesDataAccess.GetProducts();
this.grdProducts.DataSource = ds;
this.grdProducts.DataBind();
}
protected void Page_Load(object sender, EventArgs e)
{
//if (this.IsPostBack)
//{
//}
//else
//{
// this.RefreshGridWithData();
//}
this.RefreshGridWithData();
}
protected void GridView1_OnRowCommand(object sender, GridViewCommandEventArgs e)
{
if (e.CommandName != "Edit") return;
int id = Convert.ToInt32(e.CommandArgument);
lblTest.Text = id.ToString();
// do something
}
}
}