C# 如何修复ListView中所有项目的验证程序触发

C# 如何修复ListView中所有项目的验证程序触发,c#,html,asp.net,C#,Html,Asp.net,我正在尝试将验证器设置为仅对用户希望添加到其购物车中的项目(在本例中为汽车)启动。我正在使用ListView显示我要出售的汽车。当用户选择他们想要的汽车并输入数量时,验证器会为每个输入触发。我该如何解决这个问题 谢谢 Cars.apx 诀窍是为每个项目创建一个唯一的ValidationGroup。您可以使用ListView的ClientID以及DataItemIndex。请参阅siple演示的代码片段 <asp:ListView ID="ListView1" runat="server"&

我正在尝试将验证器设置为仅对用户希望添加到其购物车中的项目(在本例中为汽车)启动。我正在使用ListView显示我要出售的汽车。当用户选择他们想要的汽车并输入数量时,验证器会为每个输入触发。我该如何解决这个问题

谢谢

Cars.apx
诀窍是为每个项目创建一个唯一的
ValidationGroup
。您可以使用ListView的
ClientID
以及
DataItemIndex
。请参阅siple演示的代码片段

<asp:ListView ID="ListView1" runat="server">
    <ItemTemplate>
        <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
        <br />
        <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" 
            ErrorMessage="RequiredFieldValidator" ControlToValidate="TextBox1" 
            ValidationGroup='<%# ListView1.ClientID + "_" + Container.DataItemIndex %>'></asp:RequiredFieldValidator>
        <br />
        <asp:Button ID="Button1" runat="server" Text="Button" 
            ValidationGroup='<%# ListView1.ClientID + "_" + Container.DataItemIndex %>' />
    </ItemTemplate>
</asp:ListView>



using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;

namespace CarSales_REAL
{
    public partial class WebForm2 : System.Web.UI.Page
    {         
        protected void Page_Load(object sender, EventArgs e)
        {
            UnobtrusiveValidationMode = UnobtrusiveValidationMode.None;
            if (!IsPostBack)
            {
                ListView1.DataBind();
            }            
        }            

        private Product GetSelectedProduct(object id)
        {
            DataView productsTable = (DataView)
                SqlDataSource1.Select(DataSourceSelectArguments.Empty);
            //productsTable.RowFilter = "CarID = '" + ListView1.SelectedValue + "'";
            DataRowView row = productsTable[1];

            Product p = new Product();
            p.CarID = row["CarID"].ToString();
            p.Name = row["Name"].ToString();
            //p.Short_Description = row["Short_Description"].ToString();
            p.Long_description = row["long_Description"].ToString();
            p.CarPrice = (decimal)row["CarPrice"];
            //p.ImageFile = row["ImageFile"].ToString();
            return p;
        }

        protected void SqlDataSource1_Selecting(object sender, SqlDataSourceSelectingEventArgs e)
        {            

        }            

        protected void btnAdd_Click(object sender, EventArgs e)
        {
            if (Page.IsValid)
            {
                var product = GetSelectedProduct(ListView1.SelectedValue);

                CartItemList cart = CartItemList.GetCart();
                CartItem cartItem = cart[product.CarID];

                if (cartItem == null)
                {
                    cart.AddItem(product,
                                    Convert.ToInt32(txtQuantity1.Text));
                }
                else
                {
                    cartItem.AddQuantity(Convert.ToInt32(txtQuantity1.Text));
                }
                Response.Redirect("BuyCars.aspx");

            }
        }            

        protected void btnCart_Click(object sender, EventArgs e)
        {

        }

        protected void ListView1_SelectedIndexChanged(object sender, EventArgs e)
        {

        }

        protected void ListView1_ItemCommand(object sender, ListViewCommandEventArgs e)
        {

        }
    }
}
<asp:ListView ID="ListView1" runat="server">
    <ItemTemplate>
        <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
        <br />
        <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" 
            ErrorMessage="RequiredFieldValidator" ControlToValidate="TextBox1" 
            ValidationGroup='<%# ListView1.ClientID + "_" + Container.DataItemIndex %>'></asp:RequiredFieldValidator>
        <br />
        <asp:Button ID="Button1" runat="server" Text="Button" 
            ValidationGroup='<%# ListView1.ClientID + "_" + Container.DataItemIndex %>' />
    </ItemTemplate>
</asp:ListView>