我使用RangeValidator来验证一年是在静态开始年份和动态结束年份(当前年份)之间。我正在绘制一个巨大的空白,以这种方式设置最大值:
MaximumValue='<% DateTime.Now.Year %>'
任何帮助都表示赞赏,因为我通常不会以这种方式设置最大值。
编辑: 所以我有以下方法将代码合并到代码隐藏中:
哪个最好?
答案 0 :(得分:12)
默认情况下,ASP.NET不允许您这样做; <%= ... %>
语法也不起作用。
最简单的方法是在验证程序的MaximumValue
事件中设置代码隐藏中的Init
属性。 (这比页面的Init
,Load
或PreRender
事件更好,这会使视图状态膨胀。)
protected void rangeValidator_Init(object sender, EventArgs e)
{
((RangeValidator)sender).MaximumValue = DateTime.Now.Year.ToString();
}
通过使用sender
参数,页面上的多个RangeValidator
控件都可以共享此事件处理程序。
如果确实想在.ascx / .aspx中设置MaximumValue
,请查看此博文:The CodeExpressionBuilder。
更新:在MaximumValue
,Init
和Load
设置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();