2017-05-29 83 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

我不明白這一點 - 允許用戶做他們不應該做的事情,然後當他們這樣做時大喊大叫。 +消息框/警報是舊式的做事方式。這是一個糟糕的用戶體驗,恕我直言。

我對你有更好的建議。您可以禁用先前的日期,以便他們無法在第一時間進行選擇。您可以使用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

可悲的是,這個要求讓我能夠選擇以前的日期。當他們這樣做時,我只需要給他們一個警告 –