2008-11-04 2 views
10

У меня проблема со стандартной страницей ASP.NET с TextBox и RequiredFieldValidator. Шаги по воспроизведению довольно просты:Обязательный полевой валидатор не сжигается

  1. Поместите TextBox на странице
  2. Поместите RequiredFieldValidator на странице
  3. Направьте RequiredFieldValidator в TextBox
  4. Запустите приложение
  5. Tab от TextBox RequiredFieldValidator не показывает
  6. Введите текст, затем удалите текст и THEN tab, RequiredFieldValidator показывает

ОбязательныйFieldValidator отлично работает в обоих случаях после обратной передачи, однако, похоже, код на стороне клиента не срабатывает, пока в текстовое поле не будет введено что-то (а затем удалено).

У кого-нибудь есть решение для этого без взлома на JavaScript самостоятельно?

ответ

4

Возможно ли, что это поведение является конструкцией для подавления внешнего вида элементов контроля проверки до ввода пользователя?

Вообще говоря, Validate() вызывается всякий раз, когда нажимается элемент управления, который имеет значение CausesValidation равным true, например кнопку отправки.

В любом случае, бедные мужчины работают, вы можете может вызвать функцию Validate() из обработчика события загрузки. Это сделает все более понятным, чтобы вкладки счастливых пользователей, что им нужно что-то ввести.

protected void Page_Load(object sender, EventArgs e) 
{ 
    Validate(); 
} 
+0

Я не верю, что это по дизайну. Пользователь выделил TextBox и отодвинул фокус от него. Они будут проинформированы о том, что после нажатия кнопки «Отправить» это неверно, однако они должны быть немедленно проинформированы. – 2008-11-04 07:06:33

+0

Вызов Page.Validate() - это опция, однако я считаю, что это менее желательно, так как это означает, что страница автоматически станет недействительной для пользователя. – 2008-11-04 07:08:10

+0

Мне кажется, что все валидаторы работают таким образом. Если вы считаете, что это ошибка в структуре, возможно, вы можете рассмотреть возможность открытия ошибки подключения к Microsoft? – 2008-11-04 07:09:59

2

Вы установили атрибут/свойство EnableClientScript в значение true? У вас есть значение по умолчанию для текстового поля? если это так, вам нужно установить для свойства InitialValue это значение по умолчанию

+0

EnableClientScript является истинным. Значение по умолчанию отсутствует, а InitialValue определенно ничего. Мне было бы интересно, чтобы кто-то еще создал пустую страницу и попробовал это, чтобы увидеть, получают ли они тот же результат, что и я. – 2008-11-04 06:44:14

0

Форма может содержать несколько групп валидации. Подтверждение AFAIK запускается только через пост-обратно, активируя валидаторы соответствующей группы валидатора. Только после того, как post-back делает валидатор, добавьте его код проверки Javascript на стороне клиента.

0

Вот как работают валидаторы, они не срабатывают, если не было ввода для проверки или была обратная передача. Вам нужно будет сделать валидацию, если вы хотите, чтобы это произошло.

Я не знаю точный код, вам нужно, но он должен будет делать с обработкой ONBLUR и наиважнейшей функцией оценки:

function blurred(sender) { 
    var validator = sender.Validators[0] 
    validator.evaluationfunction(validator); 
} 

и на текстовое поле:

<asp:TextBox runat="server" ID="txt" onBlur="blurred(this)"></asp:TextBox> 
3

Здесь вы можете создать проблему юзабилити. Если вы подтвердите обязательные поля при размытии, пользователь получит много ошибок «Обязательное поле» только потому, что он выполняет табуляцию по полям.

4

Последующий к моему предыдущему ответу:

Проверка происходит в OnChange событие, а не ONBLUR. onchange срабатывает, когда фокус потерян, и значение управления изменилось.

Чтобы запустить проверку в ONBLUR случае, я добавил следующий код в Page_Load():

ScriptManager.RegisterStartupScript(this, GetType(), "js" + myTextBox.ClientID, 
    "ValidatorHookupEvent(document.getElementById(\"" + myTextBox.ClientID + 
    "\"), \"onblur\", \"ValidatorOnChange(event);\");", true); 

Работает в ASP.Net 2.

0

Я была такая же проблема. Обнаружено, что вам нужно добавить ссылки на сценарий фреймворка на ваш менеджер сценариев. Убедитесь, что у вас есть, по крайней мере, эти ссылки на скрипт с тегами «script» в вашем диспетчере сценариев.

<asp:ScriptManager ID="ScriptManager1" runat="server" ValidateRequestMode="Enabled" > 
     <Scripts> 
     <%--Framework Scripts--%> 
     <%--<asp:ScriptReference Name="MsAjaxBundle" />--%> 
     <asp:ScriptReference Name="jquery" /> 
     <asp:ScriptReference Name="jquery.ui.combined" /> 
     <asp:ScriptReference Name="WebForms.js" Path="~/Scripts/WebForms/WebForms.js" /> 
     <asp:ScriptReference Name="WebUIValidation.js" Path="~/Scripts/WebForms/WebUIValidation.js" /> 
     <asp:ScriptReference Name="WebFormsBundle" /> 
     <%--Site Scripts--%> 

    </Scripts> 
    </asp:ScriptManager> 

Вы также можете найти их на главной странице по умолчанию, созданной .NET при создании приложения webforms.

Смежные вопросы