13

我知道这是一个非常有争议的话题,通常当您考虑将此作为解决方案时,您可能需要重新考虑您的 UI 逻辑。

我知道我可以使用 ClientScriptManager.RegisterForEventValidation 通过验​​证。但是,我真的很想知道。是否可以删除单个控件的事件验证?有没有办法解决这个问题?

我在渲染后从客户端修改 DropDownList。

4

4 回答 4

34

SupportsEventValidation 属性不会为子类继承,因此如果您创建 DropDownList 的子类,不要将该属性应用于子类,并在页面上使用子类,您将拥有一个不会触发事件验证的控件,即使如果在页面上启用了事件验证。

public Class DynamicDropDownList : DropDownList
{
}

http://msdn.microsoft.com/en-us/library/system.web.ui.supportseventvalidationattribute%28v=VS.110%29.aspx

于 2011-12-20T20:11:28.120 回答
4

另一种处理方法:

EnableViewState="False"在特定元素上设置属性。

推理:如果您使用 JavaScript 在 ASP.NET 的控制之外更改此值,那么 ViewState 会在此时妨碍您。停止将其用于该控件。

于 2014-05-14T15:56:55.300 回答
3

我发现用带有 runat="server" 的 HTML 等价物替换控件更容易,然后您可以使用 Request.Forms["id"] 检索旧时尚方式的值。不会进行验证,因此在存储或处理数据时要小心。

另一种选择是覆盖页面上的渲染并使用 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);
    } 
于 2010-01-11T16:18:20.543 回答
3

对您的问题的简短回答是:不,没有办法做到这一点。您必须为整个页面禁用 EventValidation。

有多种解决方法...如果您真的不想禁用 EventValidation,请将所选值存储在隐藏字段中并恢复 DropDownList 的状态(或者可能只是清除选择?)。

如果您需要在客户端添加所有值,则无论如何都必须使用其他方法发送这些值,因为它们不会出现在服务器端控件中。这些值没有发布!

于 2010-01-11T21:58:28.190 回答