DateTime.Now.Year以填充RangeValidator中的最大值

本文关键字:最大值 RangeValidator 填充 Now Year DateTime | 更新日期: 2023-09-27 18:22:05

我正在使用RangeValidator来验证年份是否介于静态开始年份和动态结束年份(当前年份)之间。我正在为以这种方式设置最大值画一个巨大的空白:

MaximumValue='<% DateTime.Now.Year %>'

感谢任何帮助,因为我通常不会以这种方式设置最大值。

编辑:因此,我得到了以下方法将代码合并到代码库中:

  1. 验证器初始化事件
  2. 页面预呈现器
  3. 而我是一个新手,只会完成页面加载

哪个最好?

DateTime.Now.Year以填充RangeValidator中的最大值

默认情况下,ASP.NET不允许您执行此操作;CCD_ 1语法也不起作用。

最简单的方法是在验证程序的Init事件中的代码后面设置MaximumValue属性。(这比页面的InitLoadPreRender事件要好,后者会使视图状态膨胀。)

protected void rangeValidator_Init(object sender, EventArgs e)
{
    ((RangeValidator)sender).MaximumValue = DateTime.Now.Year.ToString();
}

通过使用sender参数,页面上的多个RangeValidator控件都可以共享此事件处理程序。

如果真的想在.ascx/.aspx中设置MaximumValue,那么看看这篇博客文章:CodeExpressionBuilder。

UPDATE:在<%= ... %>1、LoadPreRender中设置MaximumValue都可以。CCD_ 14具有避免增大视图状态大小的微小优点。PreRender具有dis的额外优势,即如果验证程序的视图状态被禁用,服务器端验证将中断。

它在没有代码绑定的情况下工作

 <asp:RangeValidator ID="RangeValidator1" runat="server" 
        ControlToValidate="TextBox2" ErrorMessage="RangeValidator" 
        MaximumValue='<%# DateTime.Now.Year %>' MinimumValue="2000"></asp:RangeValidator>

并在页面加载事件中调用此方法

  DataBind();

您可以通过代码隐藏来尝试这样做,在RangeValidator 上检查范围验证器文档

aspx标记

<asp:RangeValidator ID="MaxDate" runat="server" ErrorMessage="Some Error message" ControlToValidate="SomeControltoValidate" 
 Display="Dynamic" Type="Date" ></asp:RangeValidator >

代码隐藏文件。用于页面预渲染事件。

 protected void Page_PreRender(object sender, EventArgs e)
{
      MaxDate.MaximumValue = DateTime.Now.Date.AddYears(1).ToString("MM/dd/yyyy");
}

您需要一个=来使<% %>返回评估值。

MaximumValue='<%= DateTime.Now.Year %>'

using DateTime.Now更改为DateTime.Today

RangeVal.MinimumValue = DateTime.Today.ToShortDateString();
RangeVal.MaximumValue = DateTime.Today.AddYears(50).ToShortDateString();