Page_Load にて、
RadioButtonList(ラジオボタンリスト) の SelectedValue を設定していたが、
期待通りに設定されない。(設定できない)
うん、ブレークポイントを設定してトレースしてみてびっくりした。
当たり前といえばそうなんだろうけどw
たとえば、こんな感じ。
protected void Page_Load(object sender, EventArgs e)
{
if (Session["Difficulty_id"] != null)
{
RadioButtonList1.SelectedValue = (string)Session["Difficulty_id"];
}
else
{
RadioButtonList1.SelectedValue = "2";
}
}
RadioButtonList1 は難易度を選択させるラジオボタンリストです。
セッションに情報があれば、SelectedValue にその値をセットし、
なければデフォルトとして"2" を設定しましょうと。
でもこれ、RadioButtonList1.SelectedValue = "2"; を通り過ぎたときに
SelectedValue の値をマウスでポイントして確認すると、
エラーもなにも発生しないにもかかわらず、値は"" のままなんですね。
これ、RadioButtonList の選択肢を「項目の編集」などで設定済みだったら
そうはならないんです。
でも、今回の場合は「データソースの選択」から
SqlDataSource を設定していました。
ページがロードされるときには、まだデータが読み込まれていないんですね~
つまり、RadioButtonList1 は選択肢を知らないので、
SelectedValue を設定しようがない・・・てことなんでしょう。
これは盲点でした・・・
まぁWeb開発においては比較的初歩の話なのかもしれませんが><;
おそらく、DropDownList とか CheckBoxList も同じように注意が必要ですね。
ここは、Page_Load 時になんとかしておこうという考えを捨て、
protected void RadioButtonList1_PreRender(object sender, EventArgs e)
{
// セッションに難易度が設定されているか判定
if (Session["Difficulty_id"] != null)
{
// セッションに選択難易度が設定されている場合
// セッションの難易度にラジオボタンの選択をあわせる
RadioButtonList1.SelectedValue = (string)Session["Difficulty_id"];
}
else
{
// セッションに選択難易度が設定されていない場合
// ラジオボタンの選択を「NORMAL」としておく
RadioButtonList1.SelectedValue = "2";
}
ラジオボタンリストのイベントで処理することにしました。
(イベントはDataBound の方がより適しているかな・・・)
ま、見つかったからいいけど、
『オレ、選択肢の内容なんて知らないから「SelectedValue」なんざ
設定できないんだぜ!!』
的な例外を出してくれてもいいんじゃないの?
なんて思うんですが、そうできない理由とかあるんでしょうかね~
さて、レンタルサーバはActive Web に申し込みをしてみました。
ドメイン持込の方法がちょっとわかりにくかったけど・・・
(まぁ会社としてはドメイン管理を移管してほしいだろうと思うので仕様かなぁw)
とりあえずリアクションは良好そうです。
近日中に運用試験ができるかもしれませぬ~


(0)