RequiredFieldValidator не работает под firefox - PullRequest
3 голосов
/ 24 февраля 2010

Привет, ребята, я использую 2 requiredfiledvalidator для 2 выборов, один работает, но второй (тот, который мне нужен) не

    <asp:dropdownlist id="ddlMod" runat="server" Width="235px" AutoPostBack="True" Font-Names="Arial" Font-Size="XX-Small">
</asp:dropdownlist>
<asp:requiredfieldvalidator id="RequiredFieldValidator1" runat="server" Font-Names="Arial" Font-Size="XX-Small"
ErrorMessage="Select Mod" InitialValue="00" Display="Dynamic" ControlToValidate="ddlMod">
</asp:requiredfieldvalidator>

<asp:dropdownlist id="ddlInd" runat="server" Width="235px" AutoPostBack="True" Font-Size="XX-Small">
</asp:dropdownlist>
<asp:requiredfieldvalidator id="RequiredFieldValidator2" runat="server" Font-Names="Arial" Font-Size="XX-Small"
ErrorMessage="Select Ind" InitialValue="0" Display="Dynamic" ControlToValidate="ddlInd">
</asp:requiredfieldvalidator>

Если я выбираю 2-е, я вижу сообщение об ошибке для 1-го, но я не вижу ни одного сообщения, если я не выбираю или если я выбираю 1-е. Спасибо!

1 Ответ

0 голосов
/ 24 февраля 2010

Я считаю, что это известное ограничение asp.net для использования свойства AutoPostBack="true" в раскрывающихся списках. Свойство AutoPostBack отменяет процесс проверки и отправляет обратно.

В качестве простого обходного пути вы можете вызвать проверку во время обратной передачи, изменив событие загрузки страницы:

protected void Page_Load(object sender, EventArgs e)
{
    if(Page.IsPostBack)
        Page.Validate();
}

Это приведет к тому, что проверка будет по-прежнему выполняться после ситуации AutoPostBack. Если значения раскрывающегося списка неверны, страница обновится с сообщениями об ошибках, отображаемыми как ожидалось. Недостатком является то, что экран будет мерцать и т. Д., Но на самом деле единственным вариантом является добавление пользовательских сценариев проверки на стороне клиента к каждому DropDownList элементу управления, который лично я не думаю, что он того стоит.

С помощью приведенного выше кода помните, что когда страница автоматически отправляется обратно, она на самом деле может быть недействительной - однако другие методы, которые вы, возможно, вызвали, могут ожидать допустимой страницы. Используйте свойство Page.IsValid для защиты от этого. (Использование Page.IsValid на самом деле является наилучшей практикой для проверенных форм.)

Пример:

protected void Page_Load(object sender, EventArgs e)
{
    if(Page.IsPostBack)
        Page.Validate();

    ddlMod.SelectedIndexChanged += new EventHandler(ddlMod_SelectedIndexChanged);

    if(Page.IsValid)
    {
        //load some data; do some things...
    }
}

protected void ddlMod_SelectedIndexChanged(object sender, EventArgs e)
{
    if(Page.IsValid)
    {
        //do some stuff if the page validated
    }
}

Последнее замечание - вам нужно убедиться, что Page.Validate() вызывается на раннем этапе жизненного цикла страницы (Page_Load - хороший момент), как если бы вы ссылались на Page.IsValid и Validate() еще не был вызван, Page.IsValid с большим неприятным исключением ...

Если вы хотите избавиться от мерцания при автоматической обратной передаче, вы также можете использовать ajax UpdatePanel, чтобы все было легко для пользователя.

Надеюсь, это поможет!

...