3

ページを表示できるようにしたいのですが、すべてのコントロールが無効になっています。これは、ユーザーが標準のページを表示することを目的としていますが、実際にページを操作することはありません。サーバー側のすべてのUIコントロールを無効にするのは簡単ですが、私の主な懸念は、偽の情報でフォームを手動で投稿しようとする「発明的な」ユーザーです。私の質問は 2 つあります。

  1. ビルトインのイベント検証は不正なアクティビティをキャッチしますか?
  2. イベント検証でキャッチされない場合、ポストバック イベントをグローバルに破棄する方法はありますか (たとえば、完全なライフ サイクルではなく、ボタンのクリック)。
4

3 に答える 3

2

2 つの質問のいずれかに対処します。

イベント検証でキャッチされない場合、ポストバック イベントをグローバルに破棄する方法はありますか (ライフ サイクル全体ではなくボタン クリックなど)。

1 つのオプションは、ViewState に値を追加することです。その値がポストバックに存在する場合は、ユーザーをエラー ページにリダイレクトします。ビューステートを改ざんするユーザーを捕まえる必要があります。これは、ポストバック イベントだけを破棄したいというあなたの願いには応えませんが、ポストバックが可能ではないと思っていたページからポストバックを受け取った後に、エラー ページにリダイレクトすることは問題ないかもしれません。

if (ViewState["PageSetToReadOnly"] != null)
{
  // Redirect to error page.
}

別のオプションとして、ページの PreInit イベントでポストバックかどうかを確認し、そうである場合はイベント ハンドラーの配線を解除します。

if (Page.IsPostBack)
{
  this.Button1.Click -= new EventHandler(Button1_Click);
}
于 2012-09-25T19:41:53.170 に答える
2

Postbackいいえ、通常のプロセスを停止することはできません。

ページを無効にする必要があるかどうかをどのように判断していますか? Postbackボタンハンドラで同じチェックを使用すると。真の場合は、情報を保存しないでください。

public void button1_Click(object sender, EventArgs e)
{
    if(Page is disabled)
    {
        return
    }
    //Do normal save routine
}
于 2012-09-25T19:47:34.267 に答える