我正在开发一个带有应具有某些值的隐藏字段的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);