删除行的参数

发布于 2024-10-05 06:15:42 字数 2315 浏览 5 评论 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;
        }
    }

我做错了什么?

I have a problem with my delete parameter. I am using a GridView and a ObjectDataSource.
And I would like to delete one row. But when I debug is see that the value of CustomerId is always 0 in my Business Logic Layer.

Here is my code

I have two delete parameters, Id and CustomerId. These are the same names as the ones in my 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>

This is in the the code behind file

When deleting a row, I assign the value of the logged in Customer to the Delete Parameter CustomerId. This all works. I give the right value to the delete parameter.

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();
        }
    }

Normally in my Business Logic Layer, I should get now the right CustomerId, but I always get 0. While no Costumer has that ID.

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

        catch (Exception ex)
        {
            throw ex;
        }
    }

What am I doing wrong?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

下雨或天晴 2024-10-12 06:15:42

在您的 DataKeyNames 中包含 CustomerID

<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();
    }
}

Include CustomerID in your DataKeyNames

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

Either do this before the updating

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

or set the actual parameter value for the command

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();
    }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文