Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/278.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# Gridview';s更新事件触发,即使控件中的数据无效_C#_Asp.net_Gridview - Fatal编程技术网

C# Gridview';s更新事件触发,即使控件中的数据无效

C# Gridview';s更新事件触发,即使控件中的数据无效,c#,asp.net,gridview,C#,Asp.net,Gridview,我有一个commandfield和几个templatefield。templatefields附带了验证器,当选择了错误的数据时,它们会显示正确的消息。但是,当我单击commandfield时,不会显示错误,即使数据无效,也会触发事件。此外,我还检查了服务器上的Page.IsValid,即使数据处于无效状态,所有结果都很好。这将更改标记: <asp:TemplateField HeaderText="Exp. Date"> <ItemTemplate>

我有一个commandfield和几个templatefield。templatefields附带了验证器,当选择了错误的数据时,它们会显示正确的消息。但是,当我单击commandfield时,不会显示错误,即使数据无效,也会触发事件。此外,我还检查了服务器上的Page.IsValid,即使数据处于无效状态,所有结果都很好。这将更改标记:

<asp:TemplateField HeaderText="Exp. Date">
    <ItemTemplate>
        <asp:Label ID="lblExpiration" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "Expiration")%>'></asp:Label>
    </ItemTemplate>
    <EditItemTemplate  >
        <asp:DropDownList ID="ddlMM" runat="server" ValidationGroup="vgExpDateGrid">
            <asp:ListItem Value="-1">MM</asp:ListItem>
            <asp:ListItem Value="1" >01</asp:ListItem>
            <asp:ListItem Value="2">02</asp:ListItem>
            <asp:ListItem Value="3">03</asp:ListItem>
            <asp:ListItem Value="4">04</asp:ListItem>
            <asp:ListItem Value="5">05</asp:ListItem>
            <asp:ListItem Value="6">06</asp:ListItem>
            <asp:ListItem Value="7">07</asp:ListItem>
            <asp:ListItem Value="8">08</asp:ListItem>
            <asp:ListItem Value="9">09</asp:ListItem>
            <asp:ListItem Value="10">10</asp:ListItem>
            <asp:ListItem Value="11">11</asp:ListItem>
            <asp:ListItem Value="12">12</asp:ListItem>
        </asp:DropDownList>
        <span class="green"></span> /&nbsp;
        <asp:DropDownList ID="ddlYY" runat="server" ValidationGroup="vgExpDateGrid">
        </asp:DropDownList>
        <span class="green"></span>
         <asp:RequiredFieldValidator ID="rfvddlMM" ControlToValidate="ddlMM" Display="Dynamic" InitialValue="-1" runat="server" ValidationGroup="vgExpDateGrid">*</asp:RequiredFieldValidator>
         <asp:RequiredFieldValidator ID="rfvddlYY" ControlToValidate="ddlYY" Display="Dynamic" InitialValue="-1" runat="server" ValidationGroup="vgExpDateGrid">*</asp:RequiredFieldValidator>
    </EditItemTemplate>
</asp:TemplateField>

<asp:CommandField 
 UpdateText="Update" CausesValidation="true"
    HeaderText="Update" ShowEditButton="true" 
    EditText="Update <br/>Exp. Date" ButtonType="Link" />

嗯
01
02
03
04
05
06
07
08
09
10
11
12
/ 
*
*

请不要注意奇怪的控件名称和样式。基本上,模板字段有年份和月份的下拉列表。年度下拉列表填充在rowdatabound事件中。正如您所看到的,附加了验证程序的commandfield仍然正常工作。有人能告诉我问题出在哪里吗?

乍一看,我想说您没有
asp:CommandField
上的
ValidationGroup=“vgExpDateGrid”
。将commandfield更改为:

<asp:CommandField ValidationGroup="vgExpDateGrid"
 UpdateText="Update" CausesValidation="true"
  HeaderText="Update" ShowEditButton="true" 
  EditText="Update <br/>Exp. Date" ButtonType="Link" />

或者从
asp:RequiredFieldValidator