我正在开发一个带有应具有某些值的隐藏字段的Asp .net Web表单,此隐藏字段的目的是将值从客户端脚本传递到服务器,以便客户端脚本将该值放在该字段中并触发回发:

<asp:HiddenField ID="MyHiddenField" ClientIDMode="Static" runat="server" />
<asp:CheckBox ID="dummy" ClientIDMode="Static" AutoPostBack="true" runat="server" Style="display: none" />


复选框的目的是帮助触发回发:

if ($('#MyHiddenField').val() == '') {
            $('#MyHiddenField').val(SomeValue);
            //do post back:
            $('#dummy').click();
}


服务器将从隐藏字段中获取的值存储在Session中,并将其传递给隐藏字段(如果存在):

if (MyHiddenField.Value != "")
    {
        if (Session["c"] == null)
            Session.Add("c", MyHiddenField.Value);
    }
    else if (Session["c"] != null)
        MyHiddenField.Value = Session["c"].ToString();


现在回发后,我在随机请求时收到此服务器错误


  无效的回发或回调参数


堆栈跟踪显示hiddenfield是问题所在:

[ArgumentException:无效的回发或回调参数。使用配置或页面中的启用事件验证。为了安全起见,此功能验证回发或回调事件的参数源自最初呈现它们的服务器控件。如果数据有效并且是预期的,请使用ClientScriptManager.RegisterForEventValidation方法来注册回发或回调数据以进行验证。]
   System.Web.UI.ClientScriptManager.ValidateEvent(字符串uniqueId,字符串参数)+144
   System.Web.UI.Control.ValidateEvent(字符串uniqueID,字符串eventArgument)+108
   System.Web.UI.WebControls.HiddenField.LoadPostData(String postDataKey,NameValueCollection postCollection)+36
   System.Web.UI.WebControls.HiddenField.System.Web.UI.IPostBackDataHandler.LoadPostData(String postDataKey,NameValueCollection postCollection)+13
   System.Web.UI.Page.ProcessPostData(NameValueCollection postData,布尔值fBeforeLoad)+303
   System.Web.UI.Page.ProcessRequestMain(布尔includeStagesBeforeAsyncPoint,布尔includeStagesAfterAsyncPoint)+1960

隐藏字段如何导致此错误的回调参数?为什么我会收到此例外?

最佳答案

而不是调用一些虚拟控件。你可以调用doPostBack函数

if ($('#MyHiddenField').val() == '') {
        $('#MyHiddenField').val(SomeValue);
        //do post back:
        __doPostBack();


}

在服务器端页面加载方法中添加以下代码

ClientScript.GetPostBackEventReference(this, string.Empty);

10-07 19:02
查看更多