1

使用 ASP.NET/C#/nHibernate 体系结构 - 我有一个GridViewObjectDataSource并且在使删除方法工作时遇到问题。

当我简单地使用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>

谁能看到我错过了什么?

4

0 回答 0