好的,我知道这个问题已经被问了很多,我在网上发现了很多关于此问题的信息。不幸的是,它似乎都不适合我。
基本上,我有一些JavaScript在响应用户事件时运行。 JavaScript获取了一些信息(一个int)然后我想把它拿回服务器。
第一种方法是使用Page.ClientScript.GetPostBackEventReference
按here所述的__DoPostBack()
来有效调用。
我使用此方法从按钮触发回发。这似乎有效,除了我得到错误:
无效的回发或回调参数。使用配置或<%@ Page EnableEventValidation =“true”%>启用事件验证在一个页面中。出于安全考虑,此功能可验证回发或回调事件的参数是否来自最初呈现它们的服务器控件。如果数据有效且符合预期,请使用ClientScriptManager.RegisterForEventValidation方法注册回发或回调数据以进行验证。
接下来,我尝试使用HiddenField的ValueChanged
事件处理程序。我编写了我的处理程序,但更改隐藏字段的值不会触发事件。某些形式的回发仍然需要以某种方式触发。
我真的不明白为什么我这么麻烦。是否有更直接的方式来做我需要的事情?
答案 0 :(得分:0)
无论如何,这对我有用。我刚刚在我的表单中添加了一个ASP.NET HiddenField,其中包含ValueChanged
事件的服务器端处理程序。
<asp:HiddenField ID="MyHidden" runat="server" OnValueChanged="MyHidden_ValueChanged" />
然后,为了响应用户操作,我的JavaScript设置了此隐藏字段的值。
$('#<%= MyHidden.ClientID %>').val(myData);
最后,为了触发隐藏字段的ValueChanged
事件,我使用以下代码启动回发。 GetPostBackEventReference()
返回一个JavaScript语句,它将替换服务器端标记。
<%= Page.ClientScript.GetPostBackEventReference(MyHidden, String.Empty) %>;
似乎工作得很好。发生回发,并调用我的ValueChanged
处理程序。该处理程序确定隐藏字段的值并执行所需的操作。