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

时间:2012-01-30 16:01:48

标签: c# asp.net

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

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

任何帮助都表示赞赏,因为我通常不会以这种方式设置最大值。

编辑: 所以我有以下方法将代码合并到代码隐藏中:

  1. 验证器初始化事件
  2. page prerender
  3. 我是一个新手,只会在页面加载
  4. 上完成

    哪个最好?

5 个答案:

答案 0 :(得分:12)

默认情况下,ASP.NET不允许您这样做; <%= ... %>语法也不起作用。

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

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

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

如果确实想在.ascx / .aspx中设置MaximumValue,请查看此博文:The CodeExpressionBuilder

更新:在MaximumValueInitLoad设置PreRender都可以。 Init具有轻微优势,可以避免增加视图状态的大小。 PreRender具有额外的 dis 优势,如果验证程序禁用了视图状态,服务器端验证将会中断。

答案 1 :(得分:5)

没有代码隐藏

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

并在页面加载事件

中调用此方法
  DataBind();

答案 2 :(得分:2)

您可以通过后面的代码尝试这样做,检查范围验证器文档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");
}

答案 3 :(得分:0)

您需要=才能使<% %>返回评估值。

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

答案 4 :(得分:0)

using DateTime.Now更改为DateTime.Today

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