我知道这是一个备受争议的话题,通常在您将此视为解决方案时,您可能需要重新考虑您的UI逻辑。
我知道我可以使用ClientScriptManager.RegisterForEventValidation传递验证。但是,我真的很想知道。是否可以删除单个控件的事件验证?有办法解决这个问题吗?
我在渲染后从客户端修改DropDownList。
答案 0 :(得分:31)
对于子类不继承SupportsEventValidation属性,因此如果您创建DropDownList的子类,不要将该属性应用于子类,并使用页面上的子类,您将拥有一个不触发事件的控件验证,即使在页面上启用了事件验证。
public Class DynamicDropDownList : DropDownList
{
}
答案 1 :(得分:4)
另一种处理此问题的方法:
在特定元素上设置属性EnableViewState="False"
。
推理:如果您使用JavaScript在ASP.NET控件之外更改此值,那么ViewState就会妨碍您的操作。停止使用它进行控制。
答案 2 :(得分:3)
我发现使用与runat =“server”等效的HTML替换控件更容易,然后可以使用Request.Forms [“id”]检索旧方式的值。将不会进行验证,因此请小心存储或处理数据。
另一个选项是覆盖页面上的Render并使用Page.ClientScript.RegisterForEventValidation以及所有可能的答案(不太好)。 像这样的东西
protected override void Render(HtmlTextWriter writer)
{
this.Page.ClientScript.RegisterForEventValidation(ddlRisk.ID, "a");
this.Page.ClientScript.RegisterForEventValidation(ddlRisk.ID, "b");
this.Page.ClientScript.RegisterForEventValidation(ddlRisk.ID, "c");
base.Render(writer);
}
答案 3 :(得分:3)
对你的问题的简短回答是:不,没有办法做到这一点。您必须为整个页面禁用EventValidation。
有各种解决方法......如果您确实不想禁用EventValidation,请将所选值存储在隐藏字段中并恢复DropDownList的状态(或者只是清除选择?)。
如果您需要在客户端添加所有值,则无论如何都必须使用其他方法发送它们,因为它们不会出现在服务器端控件中。这些值没有发布!