2009年5月30日土曜日

asp.net更新ボタン無効化

昨日の続き。昨日はhiddenfieldを使った、なんでもpostback制御だったんだけど、あのやり方だと、更新ボタンを押されたときに破綻しそう。なので、それだけを回避する措置を。
こんな感じの実装にしてみた。

protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
DateTime dt = System.DateTime.Now;
Session["TimeStamp"] = dt;
ViewState["TimeStamp"] = dt;
}
if (IsPostBack)
{
DateTime dt1 = (DateTime)Session["TimeStamp"];
DateTime dt2 = (DateTime)ViewState["TimeStamp"];
if (dt1 != dt2)
{
Button1.Text = "不正";
}
else
{
Button1.Text = "正常";
}
DateTime dt = System.DateTime.Now;
Session["TimeStamp"] = dt;
ViewState["TimeStamp"] = dt;
}
}

やっていることは、セッション(サーバ側)とビューステート(HiddenField制御のようなクライアント側)と両方で同一タイムスタンプを持たせ、ポストバック時に、これが前回の情報と同じことを確認することで更新ボタンを押されたかどうかをチェックしているということです。

更新ボタンを押すということは、前回の送信情報と同じ情報をサーバ側に渡すことです。なので更新ボタンを押したときにサーバに渡す(クライアント側からのビューステートの)タイムスタンプがセッションで保持している情報と食い違うので、上のプログラムではボタン表示名が「不正」となります。なお、サーバとのやり取りが発生するタイミングでタイムスタンプを最新化しているので、サーバに送るデータで、サーバで一回も処理していないものに限り、ボタン名が正常となります。

0 件のコメント: