【问题标题】:CommandName="Delete" doesn't call any methodCommandName="Delete" 不调用任何方法
【发布时间】:2011-06-19 22:34:01
【问题描述】:

我有一个中继器控制器,看起来像这样:

<asp:Repeater ID="Postrepeater" runat="server" DataSourceID="datasource" >
<h2>
    <%#Eval("posttitle") %>
</h2>
<p>
    <%#Eval("posttext") %>
</p>
<asp:Button ID="DeleteLinkButton" runat="server" CommandName="Delete" Text="Delete post" />
</asp:Repeater>

数据源:

<asp:ObjectDataSource ID="datasource" TypeName="Service" SelectMethod="GetPosts" DataObjectTypeName="Post" runat="server" DeleteMethod="DeletePost" />

在 Service.cs 中

public List<Posts> GetPosts()
        {
            DALposts dal = new DALposts();
            return dal.GetPosts();
        }

public void DeletePost(Posts post)
    {
        DALPost.DeletePost(post.PostId);
    }

真正奇怪的是,SelectMethod、GetPosts 是一种魅力——正如它应有的那样。但是当我尝试删除帖子时,DeleteMethod 不会调用任何方法 - 页面只是重新加载并且没有任何反应。我尝试调试代码,但 CommandName="Delete" 根本没有调用任何东西,而且我没有收到任何错误...有什么想法吗?

我认为我发布了足够多的代码,但如果您认为需要更多代码 - 请告诉我。

更新: 经过大量阅读和这里的一些帮助后,我得出结论,除非我编写更多代码,否则无法使用转发器完成此操作 - 所以我改为使用 FormView。像魅力一样工作

【问题讨论】:

  • 我认为您需要分配 &lt;asp:Button&gt;OnClick 才能让它做某事。
  • 不 - 您应该能够使用“commandName=”来告诉数据源使用什么方法。我以前做过,只是不明白为什么它现在不起作用。

标签: c# asp.net asp.net-controls


【解决方案1】:

我认为您在此处使用中继器描述的方式是不可能的。您必须改用网格视图。

或者您可以在中继器上使用 OnItemCommand 事件,检查 Delete 参数,然后调用您的删除方法。

【讨论】:

  • 是的,我改为使用 FormView - 更容易实现。
【解决方案2】:

要通过设置CommandName 来完成某事,您必须实现OnItemCommand check this

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-13
    • 2011-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-21
    • 2023-03-21
    相关资源
    最近更新 更多