C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[1]: ポップアップで入力した日付を呼び出し元に反映させたい


(過去ログ 45 を表示中)

[トピック内 2 記事 (1 - 2 表示)]  << 0 >>

■24523 / inTopicNo.1)  ポップアップで入力した日付を呼び出し元に反映させたい
  
□投稿者/ michel (1回)-(2008/09/03(Wed) 18:50:16)

分類:[ASP.NET (C#)] 

こんにちは。
手詰まりとなってしまいましたので、質問させて頂きます。

http://japan.internet.com/developer/20051011/25.html
上記ページを参考に、ポップアップでカレンダーを表示し
入力値を呼び出し元ページのテキストボックスに反映させることができました。

その後、ボタンを押した後に
反映された内容をセッションで取得したいのですがうまくいきません。
コードは以下のように記述しました。

protected void OKButton_Click(object sender, EventArgs e)
{
DateTime hiduke = DateTime.Parse(TextBox.Text);
Session["DateTime"] = hiduke;

Response.Redirect("hogehoge.aspx", false);
}

ここで、3行目のDateTime.Parse(TextBox.Text)が
呼出元画面に反映された日付ではなく、空文字となってしまいます。
どうにかここでも反映させる方法はないのでしょうか?

ASP.NETというよりJavaScript寄りの質問となってしまいましたが、ご教授宜しくお願い致します。


//テキストボックスの隣にボタンを置いたりしたいのですが
//・テキストボックス入力不可(ReadOnly=true)
//・テキストボックスクリック時、カレンダー画面をポップアップ
//という仕様で作って欲しいと言われまして…
//無理そうであれば仕様変更を打診しようかとも思っていますが(^^;
引用返信 編集キー/
■24551 / inTopicNo.2)  Re[1]: ポップアップで入力した日付を呼び出し元に反映させたい
□投稿者/ ま (118回)-(2008/09/04(Thu) 01:39:48)
2008/09/04(Thu) 01:47:55 編集(投稿者)

なんでカレンダーを別窓で開くんです?

サンプルでは window.open で開くみたいですが、これだと、カレンダー表示中に親画面触って
しまうとカレンダーがどっかに消えちゃいますよ。閉じるまで消えないようにするには、
showModalDialog ってのが利用できますが、多少制限があります。自身へのPOSTは出来ますが、
初期表示に限りパラメータをPOSTで渡すことは出来ないです。サンプルどおりなら、GETで渡す
ので問題ないですね;;


>上記ページを参考に、ポップアップでカレンダーを表示し
>入力値を呼び出し元ページのテキストボックスに反映させることができました。

>その後、ボタンを押した後に
>反映された内容をセッションで取得したいのですがうまくいきません。

なぜにセッション経由なんです?親画面のしかるべきテキストBOXにカレンダーで選択した結果が
入っていて、それを親画面のしかるべきボタンでSUBMITしたら、親画面のポストバックが発生し
ますよね?そしたら、親画面のサーバーコードでそのテキストBOXに入っている選択された日付を
取得出来ますよね。

セッションに関してですが、親窓と子窓で同じセッションが共有できていれば取れるはずです。
空っぽってことは違うセッションになっている可能性が高いですね。
なんにしても、セッションが同じかどうか確認してください。



>コードは以下のように記述しました。

>//・テキストボックス入力不可(ReadOnly=true)
>//・テキストボックスクリック時、カレンダー画面をポップアップ

これは簡単。
<asp:TextBox id="TextBox1" OnClientClick="CalendarPicker(this.value)" ReadOnly="true" />

−−記事抜粋−−
さらなる改善の可能性>>
PostBackの回数をさらに減らすために、自分で「月入力」コントロールを作成して、ユーザーが何回
もクリックすることなく特定の月に1ステップで到達できるようにすることもできるでしょう。この
単純なサンプルは、さまざまに拡張および改善することができます。
−−記事抜粋−−

にも書いてあるとおり、単純なサンプルですので穴が一杯あります。これを元にするより、もう少し
ユーザビリティの観点から仕様を詰めたらどーです?いちいちPOSTBACKするのもむかつくでしょうし。


>>//無理そうであれば仕様変更を打診しようかとも思っていますが(^^;
全然無理じゃないです。でもこのサンプルでとりあえず動くレベルまで出来たからいいや、ってんなら
無理かもしれませんね。




>>呼出元画面に反映された日付ではなく、空文字となってしまいます。
あ、わかった。ReadOnly じゃなくて、Disabled にしていませんか?

Disabled と ReadOnly はWindowsXPではほとんど見た目が変わりません。前者の方が文字の色が若干薄
いくらいです。
で、ReadOnly は表示文字が選択出来てフォーカスも当たるけどサーバーにデータが送られます。
Disabled は表示文字が選択できず、フォーカスも当たりませんしサーバーにデータが送られません。

フォーカスは当たらないけどクリックしたらカレンダー開いて結果も表示できてサーバーにもデータが
送られるようにするには、ReadOnlyではなくて、Disabledを指定し、<asp:Hidden /> を使います。
要するにカレンダーの結果を表示用テキストBOXとデータ送信用 Hidden と両方に持たせるわけですね。

では。


追記:
フォーカスは当たらないけど選択できて表示文字の色も背景も自由に変更できてさらにその表示内容
がサーバーに送られるようにしたい、っていうユーザー要件で先週スクリプトで作りましたよ。
テキストBOXと同じ大きさのCSSで定義したテキストBOXを表示して元のテキストBOXを非表示にして
ってな具合でこさえました。


引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -