2017-05-29 27 views
0

私はpoDateCalendarという名前のカレンダーを持っています。ユーザーが今日の日付よりも前のカレンダーを選択するたびにそのようにしたいと考えています。Response.WriteがASP.NETで動作しない

protected void poDateCalendar_SelectionChanged(object sender, EventArgs e) 
    { 
     if (poDateCalendar.SelectedDate < System.DateTime.Today) 
     { 
      Response.Write("<script>alert('Warning: you are selecting a PO date earlier than today's date')</script>"); 
     } 
     poDateCalendar.Visible = false; 
     poDateBtn.Text = poDateCalendar.SelectedDate.ToShortDateString(); 
    } 

初めて試したことがありましたが、何とか今はもう動作しません。間違ったことはありますか?

また、ブレークポイントを実行しようとしましたが、ifステートメントを通過してresponse.writeを実行しました。ただし、後に表示されるものは何もありません。

答えて

1

あなたは「今日の」あなたのコードが失敗することされた単一引用符を持っているので、ただ、次の行のコードが失敗している、あなたの場合は

Response.Write("<script> alert(\"Warning: you are selecting a PO date earlier than today's date\");</script>"); 

であなたのコードを置き換えます。だから私はエスケープシーケンスを警告メッセージの開始と終了時に使用しています。

0

ブラウザに送信された生のHTMLを確認します。開いたhtmlタグの前にスクリプトがにレンダリングされた可能性があります。ページやDOMはまだありません。したがって、ブラウザがjavascriptをまったく実行したとしても、それをどうしたらいいのか分かりません。

これは、コード実行時にASP.Net Page Life Cycleにいるために発生します。 ASP.Netのページクラスは、まず、すべてのコントロールとプロパティを構築して、正しいデータを保持します。その後、がすべて完了したら、、これらのコントロールがブラウザ用のHTMLに変換されるレンダリング段階があります。このレンダリングフェーズの前に、Response.Write()に送信するものは、まだヘッダーをブラウザに送信していないレスポンスストリームに送られます。

これを回避するには、応答ストリームdirecltyに書き込む代わりにPage.RegisterStartupScript()メソッドを使用します。

0

私はそれほどのポイントを得ていません - ユーザーが行うべきではないことをユーザーに許可し、そうしたときに叫びます。 +メッセージボックス/アラートは、古い学校のやり方です。それは悪いユーザーエクスペリエンス、IMHOです。

私はここでより良い提案をしています。最初の場所で選択できないように、以前の日付に無効にすることもできます。そのためにはDayRenderイベントを使用することができます。コードビハインドで

<asp:Calendar ID="poDateCalendar" runat="server" OnDayRender="poDateCalendar_DayRender" /> 

悲しいこと
protected void poDateCalendar_DayRender(object sender, DayRenderEventArgs e) 
{ 
    if (e.Day.Date < DateTime.Today) 
    { 
     e.Day.IsSelectable = false; 
     // Additionally grey out dates if you want 
    } 
} 
+0

、要件は、以前の日付を選択できるように私に尋ねました。彼らがそうするときに警告を出すだけでいいです –

関連する問題