EventValidation, Неверный аргумент обратной передачи или обратного вызова на кнопке команды в сетке - PullRequest
0 голосов
/ 24 мая 2019

У меня есть командная кнопка внутри сетки.
Я получаю ошибку:

"Недопустимый аргумент обратной передачи или обратного вызова. Проверка события включена с использованием в конфигурации или <% @ 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
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...