1

ClientScriptManager.RegisterForEventValidationを使用して、ClientScriptManager.RegisterHiddenFieldで追加する非表示のフィールドと値を登録しようとしています。レンダーイベント中にこれを行います。エラーは発生しませんが、ASP.NET2.0がフィールドを検証していないようです。FirefoxとFirebugを使用して、値を変更したり、クライアント側のフィールド全体を削除したりできます。ASP.NETはエラーをスローしません。

カスタムPageクラスのサンプルコード:

protected override void Render(HtmlTextWriter writer)
{
    ClientScript.RegisterHiddenField("stuff", "things");
    ClientScript.RegisterForEventValidation("stuff", "things");
    base.Render(writer);
}

非表示のフィールドはページに追加されますが、ASP.NETはポストバックでフィールドまたは値を検証しません。私は何が欠けていますか?

4

1 に答える 1

2

あなたがやろうとしていることは理解できますが、クライアントによって発生したポストバックまたはコールバック イベントがターゲット サーバー コントロールに対して正しいことを検証することを目的としているため、Event Validation API の使用は適切ではありません。正しいボタンによって処理されるか、ドロップダウン リストの変更イベントが、サーバーに元々「知られていない」値に対するものではないことを確認します。

コードでは、隠しフィールドをクライアントに直接生成しているため、サーバーがポストバックで参照するための制御はありません。サーバー ページで隠しフィールド コントロールを使用した場合でも、コントロールはポストバック イベントを生成しないため、フィールド値を検証することはできません (ユーザーがそれを操作する方法がないため、サーバーが検証するためのイベント)。

最も簡単な解決策は、ViewState を使用してフィールドの値を格納し、ポストバック時に、ポストされたフィールドの値が ViewState に格納されている値と等しいことを確認することです。ViewState は既定で暗号化されるため、クライアントで変更されるべきではないデータを安全に保存できます。

于 2009-04-09T03:58:41.683 に答える