使用 ASP.NET/C#/nHibernate 体系结构 - 我有一个GridView
,ObjectDataSource
并且在使删除方法工作时遇到问题。
当我简单地使用Remove(T entity)
在我的服务层中声明的函数(然后调用我的 nHibernate 存储库)时,GridView_RowDeleting()
会调用该方法,然后调用 ,ObjectDataSource_Deleting()
然后调用服务层函数并正确删除业务对象。
但是,当我尝试使用该RemoveByID(int ID)
函数时,在调用GridView_RowDeleting()
andObjectDataSource_Deleting()
方法之后,服务层永远不会被调用。
我认为这与ObjectDataSource.DeleteParameters
, 但我似乎无法正确处理。
下面是 GridView 和 ObjectDataSource 的代码片段。如您所见,我pkChapter7ID
在 GridView 中列出了业务对象的主键DataKeyNames
:
<asp:GridView ID="gvChapter7" runat="server" DataSourceID="odsChapter7" DataKeyNames="pkChapter7ID">
<Columns>
<asp:BoundField DataField="pkChapter7ID" HeaderText="pkChapter7ID" SortExpression="pkChapter7ID"/>
...
</Columns>
</asp:GridView>
<asp:ObjectDataSource ID="odsChapter7" runat="server"
DeleteMethod="RemoveByID" OldValuesParameterFormatString="original_{0}"
SelectMethod="FindAllForProjectID" TypeName="CLS.Services.Chapter7Service">
<DeleteParameters>
<asp:Parameter Name="ID" Type="Int32" />
</DeleteParameters>
<SelectParameters>
<asp:SessionParameter Name="ID" SessionField="ProjectID" Type="Int32" />
</SelectParameters>
</asp:ObjectDataSource>
我的通用服务层的相关部分(调用 nHibernate 存储库,一旦我到达那里就可以正常工作):
[DataObjectMethod(DataObjectMethodType.Delete, false)]
public virtual void Remove(T entity)
{
_repository.Remove(entity);
}
[DataObjectMethod(DataObjectMethodType.Delete, true)]
public virtual void RemoveByID(int ID)
{
T entity = FindBy(ID);
if (entity != null)
_repository.Remove(entity);
}
我尝试DeleteParameters
在 _RowDeleting 方法中设置:
protected void gvChapter7_RowDeleting(object sender, GridViewDeleteEventArgs e)
{
odsChapter7.DeleteParameters["ID"].DefaultValue = e.Keys["pkChapter7ID"].ToString();
}
以及在 aspx 页面中设置 ObjectDataSource 控件参数的多种方法,例如:
<DeleteParameters>
<asp:ControlParameter ControlID="gvChapter7" Name="ID" PropertyName="SelectedDataKey" Type="Int32" />
</DeleteParameters>
谁能看到我错过了什么?