Обязательный полевой валидатор не работает

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

  • Поместите TextBox на страницу
  • Поместите RequiredFieldValidator на страницу
  • Настройте RequiredFieldValidator в TextBox
  • Запустите приложение
  • Вкладка от текстового поля RequiredFieldValidator не показывает
  • Введите текст, затем удалите текст и вкладку THEN, RequiredFieldValidator показывает

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

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

Ответ 1

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

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

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

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

Ответ 2

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

Валидация происходит в событии 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.

Ответ 3

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

Ответ 4

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

Ответ 5

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

Ответ 6

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

Я не знаю точного кода, который вам понадобится, но он будет связан с обработкой onblur и переопределяющей функцией оценки:

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

и в текстовом поле:

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

Ответ 7

У меня была такая же проблема. Обнаружено, что вам нужно добавить ссылки на фреймворк script на ваш менеджер script. Убедитесь, что у вас есть как минимум эти script ссылки с тегами script в вашем менеджере 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.