必填字段验证错误消息适用于文本框,但不适用于下拉列表



在我的aspx页面中,我有2个搜索选项

一种是通过文本框搜索产品。 另一种是通过下拉选择查看类别。

所以这就是我在.aspx文件中所做的

<div class="searchbox">
<strong>Search by Product Name<br /></strong> 
<br />
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox> &nbsp;
<asp:Button ID="Button8" runat="server" OnClick="Search_Product"  Text="Search Product" />
&nbsp;
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ControlToValidate="TextBox1" ErrorMessage="Please enter a product name"></asp:RequiredFieldValidator>
&nbsp;<asp:Label ID="Label3" runat="server"></asp:Label>
<br />
<br />
</div>
<br />
<div class="searchbox">
<strong>View by Category: View Product on Category Selection</strong><br />
<br />
<asp:DropDownList AppendDataBoundItems ="true" ID="DropDownList1" runat="server" DataSourceID="SqlDataSource1" DataTextField="Product_Category_Name" DataValueField="Product_Category_Name">
<asp:ListItem>Select a Category</asp:ListItem>
</asp:DropDownList>
<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:Grocery_DemoConnectionString %>" SelectCommand="SELECT Product_Category_Name FROM Product_Category"></asp:SqlDataSource>
&nbsp; 
<asp:RequiredFieldValidator ID="RequiredFieldValidator2" runat="server" ControlToValidate="DropDownList1" ErrorMessage="Please select a category"></asp:RequiredFieldValidator>
<br />
<br />
<asp:Button ID="Button9" runat="server"  OnClick="View_Product" CausesValidation="false" Text="View Product" />
&nbsp;
</div>

这就是我在.cs文件中所做的

private void DisplayProducts()
{
if (Session["BranchAdmin"] != null)
{
string branch = Session["BranchAdmin"].ToString();
string CS;
CS = "data source=LAPTOP-ODS96MIK\MSSQL2014; database = Grocery_Demo; integrated security=SSPI";
SqlConnection con = new SqlConnection(CS);
SqlCommand cmd = new SqlCommand("AdminViewProductsOnBranch", con);
cmd.CommandType = System.Data.CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@GroceryBranchName", branch);
con.Open();
GridView1.DataSource = cmd.ExecuteReader();
GridView1.DataBind();
con.Close();
}
}
protected void Search_Product(object sender, EventArgs e)
{
if (Session["BranchAdmin"] != null)
{
string branch = Session["BranchAdmin"].ToString();
string CS;
CS = "data source=LAPTOP-ODS96MIK\MSSQL2014; database = Grocery_Demo; integrated security=SSPI";
SqlConnection con = new SqlConnection(CS);
SqlCommand cmd = new SqlCommand("AdminSearchProductsOnBranch", con);
cmd.Parameters.AddWithValue("@ProductName", TextBox1.Text + "%");
cmd.Parameters.AddWithValue("@GroceryBranchName", branch);
cmd.CommandType = System.Data.CommandType.StoredProcedure;
con.Open();
GridView1.DataSource = cmd.ExecuteReader();
GridView1.DataBind();
con.Close();
con.Open();
SqlDataReader read = cmd.ExecuteReader();
read.Read();
if (read.HasRows == false)
{
Label3.Text = "Couldn't find your product";
con.Close();
}
}
}
protected void View_Product(object sender, EventArgs e)
{
if (Session["BranchAdmin"] != null)
{
string branch = Session["BranchAdmin"].ToString();
string CS;
CS = "data source=LAPTOP-ODS96MIK\MSSQL2014; database = Grocery_Demo; integrated security=SSPI";
SqlConnection con = new SqlConnection(CS);
SqlCommand cmd = new SqlCommand("AdminViewCategoriesOnBranch", con);
cmd.Parameters.AddWithValue("@ProductCategoryName", DropDownList1.SelectedValue);
cmd.Parameters.AddWithValue("@GroceryBranchName", branch);
cmd.CommandType = System.Data.CommandType.StoredProcedure;
con.Open();
GridView1.DataSource = cmd.ExecuteReader();
GridView1.DataBind();
con.Close();
con.Open();
SqlDataReader read = cmd.ExecuteReader();
read.Read();
con.Close();
}
}

如果我在文本框中搜索产品并单击搜索按钮,如果表中有数据,它会显示网格视图显示。如果搜索结果与表格中的数据不匹配,则会显示标签文本消息:"找不到您的产品"。如果我将文本框留空并单击搜索按钮,它会显示必填字段验证消息"请输入产品名称"。 通过文本框进行产品搜索选项一切正常。

另一方面,当我从下拉列表中选择一个类别并单击查看按钮时,它完美运行。 现在的问题是,如果我没有从下拉列表中选择任何类别并单击查看按钮,那么它就不会显示必填字段验证错误消息"请选择一个类别",同时它将网格视图显示变成空白我不想要。

我试图实现的是,如果未从下拉列表中选择类别,然后单击视图按钮,它应该显示必填字段验证错误消息"请选择一个类别",同时它不应该将默认的网格视图显示更改为空白。

如果文件或.cs中的代码.aspx有任何错误,则提供建议的解决方案语法将很有帮助。

指定 TextBox1 必填字段验证程序和搜索按钮控件的ValidationGroup,如下所示:

<asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ControlToValidate="TextBox1" ValidationGroup="SearchByName" ErrorMessage="Please enter a product name"></asp:RequiredFieldValidator>
<asp:Button  ValidationGroup="SearchByName"  ID="Button8" runat="server" OnClick="Search_Product"  Text="Search Product" />

指定与下拉验证程序和View_Product按钮不同的ValidationGroup

<asp:RequiredFieldValidator ID="RequiredFieldValidator2" runat="server" ControlToValidate="DropDownList1" ErrorMessage="Please select a category" ValidationGroup="SearchByCategory"></asp:RequiredFieldValidator>
<asp:Button ID="Button9" runat="server"  OnClick="View_Product" ValidationGroup="SearchByCategory"   Text="View Product" />

注意:我已经从"查看产品"按钮中删除了CausesValidation="false"属性。

将默认列表项的值设置为 -1,然后指定下拉验证器的初始值?

<asp:ListItem value="-1">Select a Category</asp:ListItem> <asp:RequiredFieldValidator ID="RequiredFieldValidator2" runat="server" ControlToValidate="DropDownList1" InitialValue="-1" ErrorMessage="Please select a category" ValidationGroup="SearchByCategory">

请尝试这个

<asp:RequiredFieldValidator runat="server" ControlToValidate="DropDownList1"
cssclass="required" display="dynamic" errormessage="Please select a category" setfocusonerror="true"
initialvalue="0"></asp:RequiredFieldValidator>

添加display="dynamic"属性。

最新更新