HiddenFieldとClientScriptManager.RegisterForEventValidation
-
06-09-2019 - |
質問
私はClientScriptManager.RegisterHiddenFieldを追加してい隠しフィールドと値を登録するClientScriptManager.RegisterForEventValidationを使用するために使用しようとしています。私はレンダリングイベント中にこれを行います。私はエラーを取得していないが、ASP.NET 2.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は、ポストバック上のフィールドまたは値を検証しません。私は何をしないのですか?
解決
私は確認して、例えば、それはクライアントによって発生したポストバックまたはコールバックイベントがターゲットサーバーコントロールのために正しいことを検証するために意図されて何をやろうとしているが、イベントの検証APIを使用していることは、本当に適切ではありません理解してクリックが正しいボタンによって処理されていること、またはドロップダウンリスト上の変更イベントが最初にサーバーに「知られて」いなかった値のためではないことを確認します。
あなたのコードでは、クライアントに直接隠しフィールドを生成しているため、サーバーは、ポストバックに参照するための制御はありません。サーバーページ上の非表示フィールドコントロールを使用している場合でも、あなたはまだコントロールがポストバックイベントを生成しないので、フィールドの値を検証することはできません(ユーザーは、したがって、それとの相互作用、および方法はありません検証するサーバーのイベント)。
最も簡単な解決策は、次に、ポストバックのフィールドの投稿値がViewStateに格納された値と等しいことを確認し、フィールドの値を格納するためのViewStateを使用することです。それは、クライアント上で変更すべきではありませんデータを格納するための安全な場所ですので、ViewStateがデフォルトで暗号化されます。