2009年5月29日金曜日

asp.netスパゲッティー

なんか無茶苦茶な感じがする。
asp.netの開発では、ボタン押下イベントは、処理が終わってからブラウザ側に制御が戻るんだけど、今回のはちょっと特殊な動きをしなければならない。
更新ボタンイベント→DBチェック→処理続行要否確認ダイアログ(はい/いいえ)→「はい」の場合にDB更新
という処理があって、これの実現方法が思いつかなかった。
で、プログラマに確認してみたところ、以下のようにやるとのこと。
1.ボタンイベントの処理では、DBチェックとダイアログ表示までを実施。
2.ダイアログにOKを押した場合、HIDDENタグに状態を記入してsubmitを行う。
3.ページロードのポストバック時の処理で、HIDDENタグの状態によって処理を変更。
というわけで、お化けのような馬鹿でっかいhiddenタグのif文だらけのPage_Load()になりそうだし、[F5]キーインによる、前回のデータ再送信なんかやられた日にはえらいことになる。なんでこんな仕様を許しちゃってるんだろう。


ちなみにプログラムはこんな感じ。

protected void Button2_Click(object sender, EventArgs e)
{
string scr="<script language='javascript'>window.onload = function() { if (window.confirm('メッセージ')) { document.getElementById('HiddenField1').value='1';form1.submit(); } }</script>";
Page.ClientScript.RegisterClientScriptBlock(GetType(), "startup", scr);
}
で、Page_Loadではこんな感じ。
protected void Page_Load(object sender, EventArgs e)
{
if (IsPostBack)
{
if (HiddenField1.Value == "1")
{
HiddenField1.Value = "0";
//DB更新
}
}
}

でもそういやぁ、
...showModalDialog();
location.href=location.href;
というプログラムがあったっけ、これは、ModalDialog処理後に、自ページを再読み込みさせたかったんだけど、hrefを使った画面遷移は、非ポストバック処理だし、ViewStateや当画面で入力した内容が消えてしまいそう。上のプログラムのようなsubmit()処理に変更せねば。。。

0 件のコメント: