请使用ClientScriptManager.RegisterForEventValidation方法注册回发或回调数据以进行验证

时间:2011-04-23 14:52:18

标签: asp.net security eventvalidation

伙计们,我的asp.net 3.5应用程序中有一个usercontrol,我在按钮点击事件上传递一些纯文本。按钮位于usercontrol中。但是当我解雇事件时,我收到以下错误;

  

无效的回发或回调参数。   使用启用事件验证      在配置或<%@ Page   EnableEventValidation =“true”%>在一个   页。为安全起见,这个   功能验证参数   回发或回调事件源自   从服务器控制那个   最初渲染它们。如果数据   是有效的和预期的,使用   ClientScriptManager.RegisterForEventValidation   注册方法   回发或回调数据   验证

当我将EnableEventValidation =“false”设置为web表单页面时就像打击一样。它会引发事件;

<%@ Page EnableEventValidation="false" %>

但我认为设置那个假不应该是个好主意。那么,这里的替代方案是什么?有错误说 '使用ClientScriptManager.RegisterForEventValidation方法来注册回发或回调数据以进行验证。 '但是我要在哪里注册那个东西?谢谢!

另外,我在usercontrol中使用了一些AjaxControlToolkit控件和一些jquery东西。

5 个答案:

答案 0 :(得分:3)

ASP.NET 2.0事件验证的问题在于它是全部或全部,并且有点沉重。我读了一篇article 来解释你应该在这里做些什么。

基本上,您需要使用事件验证引擎注册用户控件的子控件。

C#
protected override void Render(HtmlTextWriter writer)
{
    // Register controls for event validation
    foreach (Control c in this.Controls)
    {
        this.Page.ClientScript.RegisterForEventValidation(
                c.UniqueID.ToString()
        );
    }
    base.Render(writer);
}

VB
Protected Overrides Sub Render(ByVal writer As System.Web.UI.HtmlTextWriter)

    For Each aControl As Control In Me.Controls
        Me.Page.ClientScript.RegisterForEventValidation(aControl.UniqueID.ToString)
    Next aControl

    MyBase.Render(writer)
End Sub

现在这可能无法解决您的问题,因为我不确定您是如何返回字符串的。另一个article解释了事件验证是控件的唯一ID和它可以传回的所有值的组合。如果您使用按钮的command值来传递文本,则可能无法执行此任务。

如果导致问题的事件是单击,则注册用户控件的控件应该可以解决问题。

答案 1 :(得分:2)

尝试

if (!Page.IsPostBack)

在datagrid中加载和绑定数据之前

答案 2 :(得分:1)

在我的情况下,我试图更新page_load上的GridViews数据源,我忘了检查请求是否是回发,因此我的源代码试图更改并抛出此错误。一旦我做了回复检查,它工作正常。希望这可以帮助将来的某个人。

    if (Page.IsPostBack == false)
    {
        this.sqlObj = new SqlServer(ConfigurationManager.ConnectionStrings["PdfReceiverConnectionString"].ToString());
        this.populateDataGrid();
    }

答案 3 :(得分:0)

您可以将其保持启用状态,然后注册您的控件以进行事件验证。在PreRender或Render页面生命周期中添加以下调用,然后您的控件应该无需关闭eventValidation即可运行:

  Page.ClientScript.RegisterForEventValidation(this.UniqueID);

答案 4 :(得分:0)

检查您的HTML,嵌套在“标记”中也会导致