2013-11-28 19 views
0

在我最後一年的項目我使用的是的GridView使用的ObjectDataSource控件顯示數據庫中的數據。 我的ObjectDataSource與適當的鏈接「選擇」,「更新」,「刪除」作爲N層應用程序的一部分的功能。不能在「編輯」模式時,更新的GridView領域,ASP驗證防止更新

我已經測試了我的所有功能,並且它們運行良好。

但是,當在「編輯」模式的GridView我無法更新我的領域......但我可以很好地刪除行。

有什麼建議嗎?

謝謝!

UPDATE:問題是我的ASP客戶端驗證被阻止我在「編輯」模式提交更新的領域。 我已將它們添加到代碼中。

部分代碼:

<form id="form1" runat="server"> 
<div>   
    <asp:ObjectDataSource ID="BeersObjectDataSource" runat="server" 
     DeleteMethod="DeleteBeer_BLL" 
     SelectMethod="RetrieveBeers_BLL" 
     UpdateMethod="UpdateBeer_BLL" 
     TypeName="BLL" > 
     <DeleteParameters> 
      <asp:Parameter Name="id" Type="Int32" /> 
     </DeleteParameters> 
     <UpdateParameters> 
      <asp:Parameter Name="id" Type="Int32" /> 
      <asp:Parameter Name="name" Type="String" /> 
      <asp:Parameter Name="country" Type="String" /> 
      <asp:Parameter Name="logoPath" Type="String" /> 
     </UpdateParameters> 
    </asp:ObjectDataSource>   
</div> 
<asp:GridView ID="GridView1" runat="server" AllowPaging="True" 
    AllowSorting="True" AutoGenerateColumns="False" 
    DataSourceID="BeersObjectDataSource" PageSize="7" 
    onrowdeleted="GridView1_RowDeleted" onrowupdated="GridView1_RowUpdated" DataKeyNames="id"> 
    <Columns> 
     <asp:CommandField ShowDeleteButton="True" ShowEditButton="True" /> 
     <asp:BoundField DataField="id" HeaderText="ID" 
      ReadOnly="True" SortExpression="id" /> 
     <asp:BoundField DataField="name" HeaderText="Beer Name" SortExpression="name" /> 
     <asp:BoundField DataField="country" HeaderText="Beer Country" 
      SortExpression="country" /> 
     <asp:BoundField DataField="logoPath" HeaderText="Image Path" 
      SortExpression="logoPath" ReadOnly="True" /> 
     <asp:ImageField DataImageUrlField="logoPath" DataImageUrlFormatString="~/{0}" 
       HeaderText="Logo Preview" NullDisplayText="No image" 
       NullImageUrl="~/images/logobeers/no-photo.jpg" 
       SortExpression="logoPath" ReadOnly="True"> 
       <ControlStyle Height="100px" Width="100px" /> 
     </asp:ImageField> 
    </Columns> 
</asp:GridView> 
<br /> 
<br /> 
<asp:TextBox ID="TextBoxBeerName" runat="server">Beer Name</asp:TextBox> 
&nbsp;&nbsp;<asp:CustomValidator ID="CustomValidator1" runat="server" 
    ControlToValidate="TextBoxBeerName" Display="Dynamic" 
    ErrorMessage="*" 
    onservervalidate="CustomValidator1_ServerValidate" SetFocusOnError="True" 
    ForeColor="Red"></asp:CustomValidator> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
<asp:TextBox ID="TextBoxBeerCountry" runat="server">Beer Country</asp:TextBox> 
&nbsp;&nbsp;<asp:CustomValidator ID="CustomValidator2" runat="server" 
    ControlToValidate="TextBoxBeerCountry" Display="Dynamic" 
    ErrorMessage="*" 
    onservervalidate="CustomValidator2_ServerValidate" SetFocusOnError="True" 
    ForeColor="Red"></asp:CustomValidator> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
<asp:FileUpload ID="FileUpload1" runat="server" /> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
<asp:Button ID="Button1" runat="server" Text="Upload to DataBase" 
    onclick="Button1_Click" /> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
<asp:Label ID="uploadStatusLabel" runat="server" Enabled="false"></asp:Label> 
</form> 

部分代碼背後:

protected void Page_Load(object sender, EventArgs e) 
{ 

} 
protected void GridView1_RowUpdated(object sender, GridViewUpdatedEventArgs e) 
{ 
    GridView1.DataBind(); 
} 
protected void GridView1_RowDeleted(object sender, GridViewDeletedEventArgs e) 
{ 
    GridView1.DataBind(); 
} 
protected void Button1_Click(object sender, EventArgs e) 
{ 
    if (IsValid == true) 
    { /* SOME CODE ..... */ } 
} 
+0

檢查'UpdateBeer_BLL'方法。 – afzalulh

+0

@afzalulh我仔細檢查了我的方法,問題不是來自它,而是來自驗證器(請參閱我編輯的文章)。謝謝! – Yaniv

回答

0

這個問題的答案幫助我: Why asp.net validators prevent all other postback?

我做了一個的ValidationGroup

新增物業ValidationGroup="AddBeerValidationGroup"每個的CustomValidator

部分修改的代碼背後:

protected void Button1_Click(object sender, EventArgs e) 
{ 
    Page.Validate("AddBeerValidationGroup"); 

    if (Page.IsValid == true) 
    { /* SOME CODE ..... */ } 
}