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

あなたの質問に対する簡単な答えは次のとおりです。いいえ、これを行う方法はありません。ページ全体で EventValidation を無効にする必要があります。

さまざまな回避策があります... 本当に EventValidation を無効にしたくない場合は、選択した値を非表示フィールドに保存し、DropDownList の状態を復元します (または、単に選択をクリアしますか?)。

すべての値をクライアント側で追加する必要がある場合は、サーバー側のコントロールには存在しないため、とにかく他の方法を使用してそれらを送信する必要があります。これらの値は投稿されていません。

于 2010-01-11T21:58:28.190 に答える
3

コントロールを runat="server" に相当する HTML に置き換える方が簡単であることがわかりました。その後、Request.Forms["id"] を使用して昔ながらの方法で値を取得できます。検証は行われないため、データの保存または処理には注意してください。

もう 1 つのオプションは、ページの 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);
    } 
于 2010-01-11T16:18:20.543 に答える