[英]Response.Write not working in ASP.NET
我有一個名為poDateCalendar的日歷,我想這樣做,以便每當用戶選擇該日歷早於今天的日期時,都會有如下響應:
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
。 但是,之后什么也沒有顯示。
只需將代碼替換為以下行
Response.Write("<script> alert(\"Warning: you are selecting a PO date earlier than today's date\");</script>");
在您的情況下,您的代碼將失敗,因為您在“ today's”處加了一個單引號,這會使您的代碼失敗。 因此,我在警報消息的開始和結束處使用轉義序列。
檢查發送到瀏覽器的原始HTML。 該腳本可能在打開html標簽之前呈現。 還沒有頁面或DOM,因此即使瀏覽器完全運行了javascript,它也不知道如何處理它。
發生這種情況的原因是,在代碼運行時您處於ASP.Net頁面生命周期中。 ASP.Net中的頁面類的工作方式是首先建立所有控件和屬性以具有正確的數據。 然后, 一旦完成 ,就會進入渲染階段,在此階段,這些控件將轉換為適用於您的瀏覽器的HTML。 在此渲染階段之前,您發送到Response.Write()
內容都會進入響應流,該響應流甚至還沒有將標頭發送到瀏覽器。
要解決此問題,請使用Page.RegisterStartupScript()
方法,而不是直接寫入Response流。
我不太明白-允許用戶做他們不應該做的事情,然后在做的時候大聲喊叫。 +消息框/警報是老派的處理方式。 恕我直言,那是糟糕的用戶體驗。
我有一個更好的建議給您。 您可以改為禁用以前的日期,以使它們不能排在第一位。 您可以為此使用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
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.