Обязательное поле валидатора исчезает в выпадающем списке назад - PullRequest
4 голосов
/ 14 апреля 2010

Я заполняю два выпадающих списка в asp.net. Оба присвоены обязательному полевому валидатору.

Код, указанный ниже

 if (!Page.IsPostBack)
        {
            DataTable dt = new DataTable();
            dt.Columns.Add("emp");
            dt.Columns.Add("ename");
            for (int i = 0; i < 5; i++)
            {
                DataRow dr = dt.NewRow();
                dr["emp"] = (i + 1).ToString();
                dr["ename"] = (i + 1).ToString();
                dt.Rows.Add(dr);
            }
            ddlEmp.DataSource = dt;
            ddlEmp.DataTextField = "emp";
            ddlEmp.DataValueField = "ename";
            ddlEmp.DataBind();
            ListItem l1 = new ListItem("--Select--", "0");
            ddlEmp.Items.Insert(0, l1);
            DropDownList1.DataSource = dt;
            DropDownList1.DataTextField = "emp";
            DropDownList1.DataValueField = "ename";
            DropDownList1.DataBind();
            DropDownList1.Items.Insert(0, l1);

        }

код конструктора, как показано ниже

 <asp:DropDownList ID="ddlEmp" AutoPostBack="true" runat="server"></asp:DropDownList>
    <asp:RequiredFieldValidator ID="rfvEmp" runat="server" ControlToValidate="ddlEmp" ErrorMessage ="employee" InitialValue="0">
    </asp:RequiredFieldValidator>

    <asp:DropDownList ID="DropDownList1" AutoPostBack="true" runat="server"></asp:DropDownList>
    <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ControlToValidate="DropDownList1" ErrorMessage ="DropDownList1" InitialValue="0">
    </asp:RequiredFieldValidator>
    <asp:Button ID="btn" runat="server" CausesValidation="true" />

Что происходит, когда я выбираю поле, а затем снова иду и выбираю «- Выбрать--», валидатор появляется и исчезает.

Почему валидатор не остается? Куда я иду не так?

Хема

Ответы [ 2 ]

1 голос
/ 14 апреля 2010

Эта проблема укусила меня несколько раз, и просто потому, что, на мой взгляд, немного странно, как они ее разработали.

Проблема в том, что вы используете свойство InitialValue для сравнения со свойством value элемента списка, когда оно должно сравниваться с текстовым значением. Им следовало назвать свойство InitialText или что-то ...

Измените RequiredFieldValidator на следующее:

<asp:RequiredFieldValidator ID="rfvEmp" runat="server" ControlToValidate="ddlEmp" ErrorMessage="employee" InitialValue="--Select--">
</asp:RequiredFieldValidator>

<asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ControlToValidate="DropDownList1" ErrorMessage ="DropDownList1" InitialValue="--Select--">  
</asp:RequiredFieldValidator>

Код на стороне клиента сравнивает отображаемое значение, а не значение, прикрепленное к выделенному фрагменту.

0 голосов
/ 23 января 2015

Workaraund: в методе codebehind, который выполняется в autopostback, если выбранный элемент является элементом по умолчанию, установите для атрибута RequiredFieldValidator1.IsValid значение false.

...