2010-11-27 49 views
0

我的删除参数有问题。我正在使用一个GridView和一个ObjectDataSource。 我想删除一行。但是,当我调试时发现CustomerId的值在我的业务逻辑层中始终为0。删除一行的参数

这里是我的代码

我有两个删除参数,IdCustomerId。这些与我BLL中的名称相同。

<asp:GridView DataKeyNames="Id" ID="gvFavoriteMovies" DataSourceID="odsFavoriteMovies" AutoGenerateColumns="False" 
    runat="server"> 
    <Columns> 
     <asp:TemplateField> 
      <ItemTemplate>    
        <asp:Label ID="lblTitel" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "Title")%>'></asp:Label> 
      </ItemTemplate> 
     </asp:TemplateField> 

     <asp:CommandField ShowDeleteButton="True" /> 

    </Columns> 
</asp:GridView> 

<asp:ObjectDataSource ID="odsFavoriteFilm" runat="server" 
TypeName="MovieMonstrDataLayer.bll.BLLMovies" 
SelectMethod="GetFavoriteMoviesFromUser" 
DeleteMethod="DeleteFavoriteMoviesFromUser" 
onobjectcreating="odsFavoriteFilm_ObjectCreating" 
    ondeleting="odsFavoriteFilm_Deleting"> 
    <DeleteParameters> 
     <asp:Parameter Name="Id" DbType="Int32" Direction="Input" /> 
     <asp:Parameter Name="CustomerId" DbType="Int32" Direction="Input" /> 
    </DeleteParameters> 
    <SelectParameters> 
     <asp:Parameter DbType="Int32" Direction="Input" Name="CustomerId" /> 
    </SelectParameters> 
</asp:ObjectDataSource> 

这是隐藏文件

当删除行的代码,我分配登录用户的删除参数CustomerId的价值。这一切都有效。我给正确的值给删除参数。

protected void odsFavoriteFilm_Deleting(object sender, ObjectDataSourceMethodEventArgs e) 
{ 
     if (Context.User.Identity.IsAuthenticated) 
     { 
      this.odsFavoriteFilm.DeleteParameters["CustomerId"].DefaultValue = ((MovieMonstrIdentity)Context.User.Identity).Customer.Id.ToString(); 
      this.odsFavoriteFilm.DataBind(); 
     } 
    } 

通常在我的业务逻辑层,我现在应该得到正确的CustomerId,但我总是得到0。虽然没有负荷消费有一个ID。

public int DeleteFavoriteFilmFromUser(int Id, int CustomerId) 
    { 
     try 
     { 
      return Adapter.DeleteFavoriteFilmFromUser(Id, CustomerId); 
     } 

     catch (Exception ex) 
     { 
      throw ex; 
     } 
    } 

我做错了什么?

+0

我撰写建议设置的实际参数值答案,但出于好奇心,你为ID获得什么价值? – bitxwise 2010-11-27 16:20:08

+0

ID是电影的ID。我在BLL中获得了正确的电影编号。 – Vinzcent 2010-11-27 16:22:06

回答

2

在包括CustomerIDDataKeyNames

<asp:GridView DataKeyNames="Id,CustomerId" ...> 

之前的更新

protected odsFavoriteFilm_DataBinding(object sender, EventArgs e) { 
    if(!IsPostBack) { 
     this.odsFavoriteFilm.DeleteParameters["CustomerId"].DefaultValue = ((MovieMonstrIdentity)Context.User.Identity).Customer.Id.ToString(); 
    } 
} 

这样做或命令

protected void odsFavoriteFilm_Deleting(object sender, ObjectDataSourceMethodEventArgs e) { 
    if (Context.User.Identity.IsAuthenticated) { 
     e.Command.Parameters["CustomerId"].Value = ((MovieMonstrIdentity)Context.User.Identity).Customer.Id.ToString(); 
    } 
}