如何在服务器端注册客户端添加的数据以进行回发验证?

时间:2011-08-04 12:18:49

标签: asp.net events validation callback

如果我在客户端向Select元素添加Items然后提交表单,我会收到以下错误: -

  

无效的回发或回调参数。使用配置或<%@ Page EnableEventValidation =“true”%>启用事件验证在一个页面中。出于安全考虑,此功能可验证回发或回调事件的参数是否来自最初呈现它们的服务器控件。如果数据有效且符合预期,请使用ClientScriptManager.RegisterForEventValidation方法注册回发或回调数据以进行验证。

我不想禁用EventValidation。如何在客户端添加数据到服务器端的回发验证特定元素?

我知道RegisterForEventValidation方法就在那里,但我从未使用它,甚至我也不理解msdn。

如果有人这样做过,请您简单解释一下示例代码吗?

2 个答案:

答案 0 :(得分:1)

说实话,我从来没有好运,我发现在特定情况下继承必要的控件要容易得多,以避免ASP.NET尝试验证它。这比打开页面验证更好,因为除了该控件之外的所有内容仍将一如既往地进行验证。我假设您正在使用服务器端HtmlSelect(可以使用DropDownList完成)。这是一个选项:

public class NoEventValdationHtmlSelect : HtmlSelect
{
}

您必须通过Request.Form [UniqueNameOfControl]检索所选值,因为SelectedIndex / Value / Item在服务器端将为null。

答案 1 :(得分:0)

在我的情况下,我知道可以添加到客户端ListBox的所有值,所以幸运的是,有一个解决方案: -

protected override void Render(HtmlTextWriter writer)
{
 Page.ClientScript.RegisterForEventValidation(lstBox.UniqueID, "ListItemValue 
 that can be added at client side");
 base.Render(writer);
 }