事件验证:允许__doPostBack用于一个控件和* any *参数

时间:2011-08-17 14:50:58

标签: .net asp.net eventvalidation

我正在使用

__doPostBack(clientIdOfSomeButton, someData);

在JavaScript中创建PostBack。问题是提前不知道someData,并且事件验证开始了,因为我无法ClientScript.RegisterForEventValidation someData的每个可能值。

到目前为止,我只能看到解决这个问题的两种可能性:

  1. 关闭页面的事件验证,出于安全原因不建议这样做。
  2. 不是通过事件验证传递数据,而是通过JavaScript将数据放入某个隐藏文本字段,然后调用__doPostBack。那很难看。
  3. 我错过了第三种选择吗?理想情况下,我喜欢像ClientScript.RegisterForEventValidationIgnoreArguments(myButton)这样的东西,但这样的东西不存在......

1 个答案:

答案 0 :(得分:6)

如果事先不知道someData,那么服务器如何知道回发的含义?第二个参数是指示事件的类型或关于事件的特定信息,而不是用户输入的值。

我会注册一个自定义参数并以另一种方式传递someData。

ClientScript.RegisterForEventValidation(clientIdOfSomeButton, "CustomEvent");

在客户端

HTML

<input name="customArgument" type="hidden" value="" />

的Javascript

document.forms[0].customArgument = someData;
__doPostBack(clientIdOfSomeButton, '');

然后检索你的值

if(Request["__EVENTARGUMENT"] == "customArgument")
{
   var customArgument = Request["customArgument"]
}