【问题标题】:Web Forms multiple submit buttonsWeb 表单多个提交按钮
【发布时间】:2014-09-28 16:43:09
【问题描述】:

我必须制作一个简单的网络表单应用程序,该应用程序需要批准网站的 cmets。基本上我需要更新每条评论的状态。

应用程序被构建到一个带有代码的 .aspx 文件中。

这是填充视图的代码:

<tbody class="body">
<asp:Repeater ID="repeater" DataSource="<%# Comments%>" runat="server">
    <ItemTemplate>
        <tr class="row">
            <td class="col1"><%# Eval("CommentNrCrt") %></td>
            <td class="col2"><%# Eval("CommentText") %></td>
            <td class="col3"><%# Eval("ItemTitle")%></td>
            <td class="col4" data-commentID="<%# Eval("CommentID") %>">
                <input type="button" name="yes" value="yes">
                <input type="button" name="no" value="no">
            </td>
        </tr>
    </ItemTemplate>
</asp:Repeater>

后面的代码没问题,从数据库中获取数据,填充视图,但是现在,我卡住了。最初我计划如果我想要批准评论,我点击“是”,然后从服务器调用更新方法,对该评论进行更新,反之亦然“否”。

我的问题是我不知道如何告诉服务器我点击了哪个“是”按钮,因为对于每条评论我都有一个“是”和一个“现在”。

我想到了 ajax 将“data-commentID”作为身份发送,但我不知道该怎么做。 (使用 ajax)

请给我建议。

最好的问候, 马吕斯

【问题讨论】:

    标签: jquery asp.net ajax webforms submit


    【解决方案1】:

    您可以使用Repeater 的ItemCommand 事件来完成此操作。我将您的按钮更改为 ASP.NET 按钮,并将 CommentID 添加为 CommandArgument,并将 Yes 或 No 添加为 CommandText。然后在 ItemCommand 事件中,您可以检索这些值并更新您的数据库。

    如果您想使用 AJAX 执行此操作,您可以在中继器周围放置一个 ASP.NET UpdatePanel。

    中继器和按钮的变化如下:

    <asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
    <ContentTemplate>
    <asp:Repeater ID="repeater" DataSource="<%# Comments%>" runat="server" OnItemCommand="repeater_ItemCommand">
        <ItemTemplate>
            <tr class="row">
                <td class="col1"><%# Eval("CommentNrCrt") %></td>
                <td class="col2"><%# Eval("CommentText") %></td>
                <td class="col3"><%# Eval("ItemTitle")%></td>
                <td class="col4">
                    <asp:Button ID="btnYes" runat="server" CommandName='<%# Eval("CommentID") %>' CommandArgument="Yes" Text="Yes" />
                    <asp:Button ID="btnNo" runat="server" CommandName='<%# Eval("CommentID") %>' CommandArgument="No" Text="No" />
                </td>
            </tr>
        </ItemTemplate>
    </asp:Repeater>
    </ContentTemplate>
    </asp:UpdatePanel>
    

    ...在你的代码后面:

    protected void repeater_ItemCommand(object source, RepeaterCommandEventArgs e)
    {
        int commentId = int.Parse(e.CommandArgument.ToString());
        string yesOrNo = e.CommandName;
    
        //Do your database update here
    }
    

    我不确定你是 C# 还是 VB,但我下面的代码是用 C# 编写的,但应该很容易找出 VB 的等价物。

    您也可以使用 JavaScript 或 jQuery 执行 AJAX 部分。如果是这种情况,请在您的问题中明确说明,我本人或其他人可能会提供其他答案。

    【讨论】:

    • 您好约翰,感谢您的帮助。我要试试这个并回来更新。后面的代码是 C#。
    【解决方案2】:

    我已经解决了:

    所以我把这个:&lt;asp:ScriptManager ID="ScriptManager1" runat="server"&gt;&lt;/asp:ScriptManager&gt; 放在表格后面。

    我在每个按钮上添加了 OnClick 事件,它背后的代码正在工作:

    protected void btnYes_Click(object sender, EventArgs e)
      {
           Button btn=(Button)sender;
           string commentID = btn.CommandName;
    
           //more code
      }
    

    【讨论】: