[英]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.