2012-01-30 2 views
2

Я использую RangeValidator для проверки того, что год находится между статическим началом и динамическим годом окончания (текущий год). Я рисую огромный пробел для установки максимального значения таким образом:DateTime.Now.Year, чтобы заполнить максимальное значение в RangeValidator

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

Любая помощь оценена как я обычно не устанавливают максимальные значения таким образом.

Edit: Так я дал следующие способы включения кода в коде:

  1. валидатор INIT событие
  2. страница PreRender
  3. и я Newb и будет просто сделано на странице load

который лучше?

ответ

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 управления на странице может все доли этого обработчика события.

Если вы действительно хотел установить MaximumValue в .ascx/.aspx, то взгляните на этом блоге: The CodeExpressionBuilder.

UPDATE: Установка MaximumValue в Init, Load и будет вся работа PreRender. Init имеет небольшое преимущество в том, что он позволяет избежать увеличения размера состояния представления. PreRender имеет дополнительный dis преимущество, что проверка на стороне сервера будет нарушена, если состояние просмотра отключено для валидатора.

+0

спасибо, очень полезно – peroija

0

Для получения вычитаемого значения <% %> вам понадобится =.

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

спасибо, только одна проблема, я получите эту ошибку: Значение '<% = DateTime.Now.Year%>' свойства MaximumValue 'ra__curr_yr' не могут быть преобразованы в тип Integer. – peroija

+0

@Guvante: AFAIK '<%= %>' действителен для назначения элементам управления на стороне клиента и '<%# %>' для элементов управления на стороне сервера. –

2

вы можете попробовать, как это в коде позади, проверьте Range валидатора documentaion 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"); 
} 
+0

Я собирался сделать код позади метода, так как это было бы проще, я просто пытался избежать 20 строк присвоения :) – peroija

+0

lol: P, скажите, полезно ли это отметить это как: D –

5

Он работает без коде

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

и вызывать этот метод в случае загрузки страницы

DataBind(); 
+0

Это тоже работает, но добавляет размер состояния просмотра. –

+0

@MichaelLiu - Правильно, но пользователь поставил вопрос таким образом 'MaximumValue = '<% DateTime.Now.Year%>' ' перед тем, как он/она его обновил. – Mubarek

+1

Это может добавить в состояние просмотра, но гораздо проще настроить и понять. –

0

изменяющемся от using DateTime.Now к DateTime.Today

RangeVal.MinimumValue = DateTime.Today.ToShortDateString(); 
RangeVal.MaximumValue = DateTime.Today.AddYears(50).ToShortDateString(); 
Смежные вопросы