2013-04-22 26 views
0

我有一個記錄我們HR系統的公司假期的頁面,但現在如果您嘗試編輯結束日期假日和用戶意外地輸入了開始日期之前的結束日期,它仍然驗證爲真,並允許將編輯寫入數據庫表。當asp.net編輯模板驗證控件組運行並且應該返回false時,C#IsVaild不會翻轉爲False

我錯過了什麼讓頁面始終驗證爲True?我在這個頁面上也有一個DetailsView,它使用了一組驗證控件,它正在工作,並且當某些東西沒有通過驗證時驗證爲false。

protected void HolidaysDS_Updated(object sender, SqlDataSourceStatusEventArgs e) 
{ 
    if (e.Exception != null) 
    { 
     lblNullUpdate.Text = "One of your updated fields is invalid. Your update did not occur."; 
     lblNullUpdate.Visible = true; 

     e.ExceptionHandled = true; 
    } 
} 

protected void gvHolidays_RowUpdating(object sender, GridViewUpdateEventArgs e) 
{ 
    Page.Validate("EditValidationControls"); 

    if (Page.IsValid == false) 
    { 
     e.Cancel = true; 
    } 
    lblNullUpdate.Visible = false; 
} 

也就是說,如果用戶在更新傳遞空和處理異常我目前的C#也應該驗證頁面和檢查,如果一切是有效還是無效的事件。

<h2>Holidays</h2> 
     <asp:Label ID="lblHolidayYear" runat="server" Text="Holiday Year:" AssociatedControlID="ddlHolidayYears"></asp:Label> 
     <asp:DropDownList ID="ddlHolidayYears" runat="server" AutoPostBack="True" 
      DataSourceID="HolidayYearDS" DataTextField="HYear" DataValueField="HYear"> 
     </asp:DropDownList> 
     <asp:GridView ID="gv_Holidays" runat="server" AutoGenerateColumns="False" 
     DataKeyNames="HolidayID" 
      DataSourceID="HolidaysDS" 
      AllowSorting="True" 
      CssClass="gvhours" 
      HeaderStyle-CssClass="header" 
      AlternatingRowStyle-CssClass="alternating" 
      SortedAscendingHeaderStyle-CssClass="sortasc-header" 
      SortedDescendingHeaderStyle-CssClass="sortdesc-header" 
      CommandRowStyle-CssClass="command" 
      PagerStyle-CssClass="page" 
      OnRowUpdating="gvHolidays_RowUpdating"> 
      <AlternatingRowStyle CssClass="alternating" /> 
      <Columns> 
       <asp:CommandField ShowEditButton="true" 
        ValidationGroup="EditValidationControls" /> 
       <asp:BoundField DataField="HolidayID" HeaderText="HolidayID" InsertVisible="False" 
        ReadOnly="True" SortExpression="HolidayID" Visible="False" 
        ShowHeader="False" /> 
       <asp:BoundField DataField="HYear" HeaderText="Year" SortExpression="HYear" Visible="false" /> 
       <asp:BoundField DataField="HStartDate" DataFormatString="{0:MM/dd/yyyy}" 
        HeaderText="Start Date" SortExpression="HStartDate" /> 
       <asp:BoundField DataField="HEndDate" DataFormatString="{0:MM/dd/yyyy}" 
        HeaderText="End Date" SortExpression="HEndDate" /> 
       <asp:BoundField DataField="HDescription" HeaderText="Description" 
        SortExpression="HDescription" /> 
      </Columns> 
      <HeaderStyle CssClass="header" /> 
      <PagerStyle CssClass="page" /> 
      <SortedAscendingHeaderStyle CssClass="sortasc-header" /> 
      <SortedDescendingHeaderStyle CssClass="sortdesc-header" /> 
     </asp:GridView> 
     <asp:Label ID="lblNullUpdate" runat="server" Font-Bold="True" Font-Size="Large" 
      ForeColor="Red" Text="Label" Visible="False"></asp:Label> 
     <asp:SqlDataSource ID="HolidaysDS" runat="server" OnInserted="HolidaysDS_Inserted" 
      OnUpdated="HolidaysDS_Updated" 
      ConnectionString="<%$ ConnectionStrings:TigerTimeTrackerConnectionString %>" 
      ProviderName="<%$ ConnectionStrings:TigerTimeTracker_ConnectionString.ProviderName %>" 
      InsertCommand="usp_Holidays_Add_Holiday" 
      InsertCommandType="StoredProcedure" 
      SelectCommand="usp_Holidays_Get_Holidays_By_Year" 
      SelectCommandType="StoredProcedure" 
      UpdateCommand="usp_Holidays_Update_Holiday" 
      UpdateCommandType="StoredProcedure"> 
       <SelectParameters> 
        <asp:ControlParameter ControlID="ddlHolidayYears" Name="Year" 
         PropertyName="SelectedValue" Type="String" /> 
       </SelectParameters> 
       <UpdateParameters> 
        <asp:Parameter Name="HolidayID" Type="Int32" /> 
        <asp:ControlParameter ControlID="ddlHolidayYears" Name="HYear" PropertyName="SelectedValue" Type="String" /> 
        <asp:Parameter Name="HStartDate" Type="DateTime" /> 
        <asp:Parameter Name="HEndDate" Type="DateTime" /> 
        <asp:Parameter Name="HDescription" Type="String" /> 
       </UpdateParameters> 
       <InsertParameters> 
        <asp:Parameter Name="Year" Type="String" /> 
        <asp:Parameter Name="StartDate" Type="DateTime" /> 
        <asp:Parameter Name="EndDate" Type="DateTime" /> 
        <asp:Parameter Name="Description" Type="String" /> 
       </InsertParameters> 
      </asp:SqlDataSource> 
      <asp:SqlDataSource ID="HolidayYearDS" runat="server" 
       ConnectionString="<%$ ConnectionStrings:TigerTimeTracker_ConnectionString %>" 
       ProviderName="<%$ ConnectionStrings:TigerTimeTracker_ConnectionString.ProviderName %>" 
       SelectCommand="usp_Holidays_Get_Distinct_Holiday_Years" 
       SelectCommandType="StoredProcedure" > 
      </asp:SqlDataSource> 
      <asp:DetailsView ID="dvHolidays" runat="server" Height="50px" Width="125px" 
      AutoGenerateRows="False" 
      DataKeyNames="HolidayID" 
      DataSourceID="HolidaysDS" 
      DefaultMode="Insert" 
      CssClass="dView" 
      HeaderStyle-CssClass="header" 
      FieldHeaderStyle-CssClass="fieldHeader" 
      AlternatingRowStyle-CssClass="alternating" 
      CommandRowStyle-CssClass="command" 
      PagerStyle-CssClass="page" 
      FooterStyle-CssClass="footer" 
      OnItemInserted="dvHolidays_ItemInserted" 
      OnItemInserting="dvHolidays_ItemInserting"> 
       <AlternatingRowStyle CssClass="alternating" /> 
      <CommandRowStyle CssClass="command" /> 
      <FieldHeaderStyle CssClass="fieldHeader" /> 
      <Fields> 
       <asp:BoundField DataField="HolidayID" HeaderText="HolidayID" 
        InsertVisible="False" ReadOnly="True" SortExpression="HolidayID" /> 
       <asp:TemplateField HeaderText="Year: " SortExpression="HYear"> 
        <InsertItemTemplate> 
         <asp:TextBox ID="txtHolidayYear" runat="server" Text='<%# Bind("Year") %>'></asp:TextBox> 
         <asp:RequiredFieldValidator ID="YearRequiredValidator" runat="server" ValidationGroup="InsertValidationControls" ControlToValidate="txtHolidayYear" 
          ErrorMessage="Required"></asp:RequiredFieldValidator> 
         <asp:RegularExpressionValidator ID="YearLengthValidator" runat="server" ValidationGroup="InsertValidationControls" ControlToValidate="txtHolidayYear" 
          ValidationExpression="^[0-9]{4,4}$" ErrorMessage="The Year can only be numeric(0-9), and has to be four digits."></asp:RegularExpressionValidator> 
        </InsertItemTemplate> 
       </asp:TemplateField> 
       <asp:TemplateField HeaderText="Start Date: " SortExpression="HStartDate"> 
        <EditItemTemplate> 
         <asp:TextBox ID="txtHolidayStartEdit" runat="server" Text='<%# Bind("HStartDate") %>' ClientIDMode="Static"></asp:TextBox> 
         <asp:RequiredFieldValidator ID="HolidayStartEditRequiredValidator" runat="server" ValidationGroup="EditValidationControls" ControlToValidate="txtHolidayStartEdit" 
          ErrorMessage="Required"></asp:RequiredFieldValidator> 
        </EditItemTemplate> 
        <InsertItemTemplate> 
         <asp:TextBox ID="txtHolidayStartInsert" runat="server" Text='<%# Bind("StartDate") %>' ClientIDMode="Static"></asp:TextBox> 
         <asp:RequiredFieldValidator ID="HolidayStartInsertRequiredValidator" runat="server" ValidationGroup="InsertValidationControls" ControlToValidate="txtHolidayStartInsert" 
          ErrorMessage="Required"></asp:RequiredFieldValidator> 
        </InsertItemTemplate> 
       </asp:TemplateField> 
       <asp:TemplateField HeaderText="End Date: " SortExpression="HEndDate"> 
        <EditItemTemplate> 
         <asp:TextBox ID="txtHolidayEndEdit" runat="server" Text='<%# Bind("HEndDate") %>' ClientIDMode="Static"></asp:TextBox> 
         <asp:RequiredFieldValidator ID="HolidayEndEditRequiredValidator" runat="server" ValidationGroup="EditValidationControls" ControlToValidate="txtHolidayEndEdit" 
          ErrorMessage="Required"></asp:RequiredFieldValidator> 
         <asp:CompareValidator ID="HolidayRangeCheckEdit" runat="server" ValidationGroup="EditValidationControls" ControlToValidate="txtHolidayEndEdit" ErrorMessage="End Date must be after Start Date." 
          ControlToCompare="txtHolidayStartEdit" Operator="GreaterThanEqual" Type="Date"></asp:CompareValidator> 
        </EditItemTemplate> 
        <InsertItemTemplate> 
         <asp:TextBox ID="txtHolidayEndInsert" runat="server" Text='<%# Bind("EndDate") %>' ClientIDMode="Static"></asp:TextBox> 
         <asp:RequiredFieldValidator ID="HolidayEndInsertRequiredValidator" runat="server" ValidationGroup="InsertValidationControls" ControlToValidate="txtHolidayEndInsert" 
          ErrorMessage="Required"></asp:RequiredFieldValidator> 
         <asp:CompareValidator ID="HolidayRangeCheckInsert" runat="server" ValidationGroup="InsertValidationControls" ControlToValidate="txtHolidayEndInsert" 
          ControlToCompare="txtHolidayStartInsert" Operator="GreaterThanEqual" Type="Date" ErrorMessage="Please enter an End Date that is after the Start Date."></asp:CompareValidator> 
        </InsertItemTemplate> 
       </asp:TemplateField> 
       <asp:TemplateField HeaderText="Description: " SortExpression="HDescription"> 
        <EditItemTemplate> 
         <asp:TextBox ID="txtHolidayDescriptionEdit" runat="server" Text='<%# Bind("HDescription") %>'></asp:TextBox> 
        </EditItemTemplate> 
        <InsertItemTemplate> 
         <asp:TextBox ID="txtHolidayDescriptionInsert" runat="server" Text='<%# Bind("Description") %>'></asp:TextBox> 
        </InsertItemTemplate> 
       </asp:TemplateField> 
       <asp:CommandField ShowInsertButton="true" 
        ValidationGroup="InsertValidationControls"/> 
      </Fields> 
      <FooterStyle CssClass="footer" /> 
      <HeaderStyle CssClass="header" /> 
      <PagerStyle CssClass="page" /> 
      </asp:DetailsView> 
     <asp:Label ID="lblInsertUniqueError" runat="server" Font-Bold="True" 
      Font-Size="Large" ForeColor="Red" Text="Label" Visible="False"></asp:Label> 
     </asp:View> 
+0

你是在回發的數據綁定'GridView'? – 2013-04-22 21:26:18

+0

我在我的RowUpdated事件中數據綁定gridview的數據源。 (對象發件人,GridViewUpdatedEventArgs e) } – 2013-04-23 13:38:49

回答

1

問題一直是我在GridView中使用綁定字段而不是模板字段。這是我遇到此問題的其他人的更新代碼。

<asp:GridView ID="gv_Holidays" runat="server" AutoGenerateColumns="False" 
     DataKeyNames="HolidayID" 
      DataSourceID="HolidaysDS" 
      AllowSorting="True" 
      CssClass="gvhours" 
      HeaderStyle-CssClass="header" 
      AlternatingRowStyle-CssClass="alternating" 
      SortedAscendingHeaderStyle-CssClass="sortasc-header" 
      SortedDescendingHeaderStyle-CssClass="sortdesc-header" 
      CommandRowStyle-CssClass="command" 
      PagerStyle-CssClass="page" 
      OnRowUpdating="gvHolidays_RowUpdating"> 
      <AlternatingRowStyle CssClass="alternating" /> 
      <Columns> 
       <asp:CommandField ShowEditButton="true" 
        ValidationGroup="EditValidationControls" /> 
       <asp:BoundField DataField="HolidayID" HeaderText="HolidayID" InsertVisible="False" 
        ReadOnly="True" SortExpression="HolidayID" Visible="False" 
        ShowHeader="False" /> 
       <asp:BoundField DataField="HYear" HeaderText="Year" SortExpression="HYear" Visible="false" /> 
       <asp:TemplateField HeaderText="Start Date" SortExpression="HStartDate" > 
        <EditItemTemplate> 
         <asp:TextBox ID="txtHolidayStartEdit" runat="server" Text='<%# Bind("HStartDate", "{0:MM/dd/yyyy}") %>' ClientIDMode="Static"></asp:TextBox> 
         <asp:RequiredFieldValidator ID="HolidayStartEditRequiredValidator" runat="server" ValidationGroup="EditValidationControls" ControlToValidate="txtHolidayStartEdit" 
          ErrorMessage="Required"></asp:RequiredFieldValidator> 
        </EditItemTemplate> 
        <ItemTemplate> 
         <asp:Label ID="lblStartItem" runat="server" Text='<%# Bind("HStartDate", "{0:MM/dd/yyyy}") %>' ></asp:Label> 
        </ItemTemplate> 
       </asp:TemplateField> 
       <asp:TemplateField HeaderText="End Date" SortExpression="HEndDate" > 
        <EditItemTemplate> 
         <asp:TextBox ID="txtHolidayEndEdit" runat="server" Text='<%# Bind("HEndDate", "{0:MM/dd/yyyy}") %>' ClientIDMode="Static"></asp:TextBox> 
         <asp:RequiredFieldValidator ID="HolidayEndEditRequiredValidator" runat="server" ValidationGroup="EditValidationControls" ControlToValidate="txtHolidayEndEdit" 
          ErrorMessage="Required"></asp:RequiredFieldValidator> 
         <asp:CompareValidator ID="HolidayRangeCheckEdit" runat="server" ValidationGroup="EditValidationControls" ControlToValidate="txtHolidayEndEdit" ErrorMessage="End Date must be after Start Date." 
          ControlToCompare="txtHolidayStartEdit" Operator="GreaterThanEqual" Type="Date"></asp:CompareValidator> 
        </EditItemTemplate> 
        <ItemTemplate> 
         <asp:Label ID="lblEndItem" runat="server" Text='<%# Bind("HEndDate", "{0:MM/dd/yyyy}") %>'></asp:Label> 
        </ItemTemplate> 
       </asp:TemplateField> 
       <asp:BoundField DataField="HDescription" HeaderText="Description" 
        SortExpression="HDescription" /> 
      </Columns> 
      <HeaderStyle CssClass="header" /> 
      <PagerStyle CssClass="page" /> 
      <SortedAscendingHeaderStyle CssClass="sortasc-header" /> 
      <SortedDescendingHeaderStyle CssClass="sortdesc-header" /> 
     </asp:GridView> 
相關問題