Вопрос

Следующий код .NET 3.5, помещенный в aspx-файл, вызовет ошибку JavaScript при загрузке страницы (для пользователей, у которых включен JavaScript):

<noscript>
    <asp:TextBox ID="txt" runat="server"></asp:TextBox>
    <asp:RequiredFieldValidator ID="txt_RequiredFieldValidator" runat="server" 
      ControlToValidate="txt"></asp:RequiredFieldValidator>
    <asp:Button ID="btn" runat="server" Text="Button" />
</noscript>

Ошибка возникает из-за того, что JavaScript, сгенерированный элементом управления validator ASP.NET не содержит нулевой проверки перед второй строкой кода ниже:

var ctl00_body_txt_RequiredFieldValidator =
  document.all ?
    document.all["ctl00_body_txt_RequiredFieldValidator"] :
    document.getElementById("ctl00_body_txt_RequiredFieldValidator");

ctl00_body_txt_RequiredFieldValidator.controltovalidate = "ctl00_body_txt";

Кто-нибудь может предложить обходной путь для этого?


Сноска: Зачем я это делаю?Для моих пользователей, не использующих JavaScript, я заменяю некоторые функции AJAX некоторыми другими компонентами пользовательского интерфейса, которые нуждаются в проверке.

Это было полезно?

Решение

Вы должны добавить следующее в RequiredFieldValidator:

enableclientscript="false"

Поскольку вы используете их в <noscript> тегах, нет смысла предоставлять элементы управления на стороне клиента - они будут отображаться, только если JS выключен.

Это принудительно произведет проверку (автоматически) на стороне сервера для вас.

Просто убедитесь , что вы позвонили "Страница.Является действительным" прежде чем вы обработаете ответ.

Видишь Базовый валидатор.Включить клиентский скрипт для получения более подробной информации.

Другие советы

Javascript ищет элемент, содержащийся в noscript?AFAIK нет чистого способа обнаружить поддержку скриптов со стороны сервера.

Я думаю, вам нужно будет встроить перенаправление (я видел, как это делается с помощью мета-обновления в заголовке noscript, если вы не возражаете против сбоя проверки), чтобы подтолкнуть пользователей noscript к "пожалуйста, включите script на странице" или выполнить некоторую операцию, чтобы ослабить привязку проверки / управления, что может потребовать некоторого переосмысления колеса.Это одна из тех областей, где asp.net тесная связь между контроллером и представлением действительно наказывает.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top