Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 必需的字段验证器在dropdownlist回发时消失_C#_Asp.net_Requiredfieldvalidator - Fatal编程技术网

C# 必需的字段验证器在dropdownlist回发时消失

C# 必需的字段验证器在dropdownlist回发时消失,c#,asp.net,requiredfieldvalidator,C#,Asp.net,Requiredfieldvalidator,我在asp.net中填充了两个dropdownlist。 两者都分配给所需的字段验证器 代码隐藏如下所示 if (!Page.IsPostBack) { DataTable dt = new DataTable(); dt.Columns.Add("emp"); dt.Columns.Add("ename"); for (int i = 0; i < 5; i++)

我在asp.net中填充了两个dropdownlist。 两者都分配给所需的字段验证器

代码隐藏如下所示

 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" />
if(!Page.IsPostBack)
{
DataTable dt=新的DataTable();
dt.列。添加(“emp”);
dt.列。添加(“ename”);
对于(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=新的ListItem(“--Select--”和“0”);
ddlEmp.Items.Insert(0,l1);
DropDownList1.DataSource=dt;
DropDownList1.DataTextField=“emp”;
DropDownList1.DataValueField=“ename”;
DropDownList1.DataBind();
DropDownList1.Items.Insert(0,l1);
}
设计器代码如下所示

 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" />

现在发生的是,当我选择一个字段,然后再次选择“-Select-”,验证器出现并消失

验证器为什么不留下来? 我哪里做错了


赫马

这个问题已经困扰了我很多次,仅仅因为在我看来,他们是如何设计它的有点古怪

问题在于,当列表项应与文本值进行比较时,使用
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>


客户端代码正在比较显示的值,而不是后台附加到选择的值。

WorkAround:在自动回发上执行的codebehind方法上,如果选择的项是默认项,请将RequiredFieldValidator 1.IsValid属性设置为false。

抱歉,不是true。InitialValue与DDL的SelectedValue进行比较。不知道为什么这被标记为正确答案tho。我也有同样的问题。到目前为止运气不好,下拉菜单会触发自动回发,红色错误消息在回发过程中闪烁..:/