【问题标题】:Multiple rows have multiple submit buttons, should I make a form for each button?多行有多个提交按钮,我应该为每个按钮制作一个表单吗?
【发布时间】:2010-01-28 22:12:03
【问题描述】:

我列出了大约 20 行,每行代表一个订单。

每行需要有3个按钮,每次点击按钮都会执行不同的动作。

我有 3 个动作来处理每个按钮发布请求,我只是不确定如何为每个按钮设置 Html 表单。

<tr>
<td>
<form method="post" action="/orders/do1"><input type=button ... /></form>
<form method="post" action="/orders/do2"><input type=button ... /></form>
<form method="post" action="/orders/do3"><input type=button ... /></form>
</td>
</tr>

我应该为列表中的每行的每个按钮创建 3 个表单吗?

(这意味着 20 行 x 3 个表单 = 一个页面上的 60 个表单)

这样做可以吗? (即或者有更好的方法吗?)

【问题讨论】:

    标签: c# asp.net html asp.net-mvc


    【解决方案1】:

    我会使用 jQuery 回发而不是表单,但这取决于您在控制器中执行的操作。

    如果您可以扩展问题以包含该详细信息,那将会很方便。

    例如,如果按钮是创建、删除和更新,则使用一个表单,转到不同的 ActionResult。

    它的行应该是部分视图恕我直言,你应该有一个单一的形式。

    【讨论】:

    • 所以您的意思是回发到单个操作,并根据提交按钮的名称将该操作结果重定向到另一个操作?
    • 如果你喜欢。这完全取决于您的按钮在做什么,我们目前还不知道。如果每个按钮都将成为删除行的操作,那么我将发布到传递 Id 并处理操作中的删除的相同操作。然后对于编辑,我将有一个编辑操作并在那里处理它。所以我不会重定向我会让按钮调用特定的操作。
    【解决方案2】:

    根据您发布的 sn-p,我假设您并不关心实际提交任何表单数据到您的操作 - 只需调用正确的操作(可能有一些可以直接指定的数据在操作 url 中,如 id/index)

    如果是这种情况,那么您甚至不需要提交按钮。只是一个简单的链接(您可以自己或使用jQueryUI 将其设置为看起来像一个按钮,从而保持简单和漂亮)

    如果您确实需要向您的操作提交表单数据,只需为您的提交按钮提供相同的名称和不同的值,然后检查(或让您的模型绑定器工作)准确地调用该操作的按钮并让您的控制器采取相应的行动。

    here(第二个答案,呵呵,接受的实际上使用了多种形式)和here(这个实际上使用了一些时髦的东西,可能有点矫枉过正,并且在生成时并不完全合适提交按钮的数量未知,但仍然很有趣)

    【讨论】:

      【解决方案3】:

      没有。 Asp.net 讨厌 看到多种形式。只需给按钮一个不同的 ID/名称/值或其他东西。

      【讨论】:

      • 这是 MVC 而不是老式的 ASP.NET
      【解决方案4】:

      不..不..不。多种形式是个坏主意。是的,你可以这样做。是的,您会遇到奇怪的行为,例如“当用户按下输入时会发生什么?”

      每个浏览器对在同一个 html 文档中查看多个表单的处理方式略有不同。为自己省去麻烦并以不同的方式处理。

      【讨论】:

      • 如果用户通过在文本输入中按 Enter 来提交带有多个按钮的表单会发生什么不一致的情况……但对于文档中有多个表单则没有。
      【解决方案5】:

      这不是一个 asp.net 问题吗?你能不使用中继器、数据列表、数据网格吗?然后您可以使用控件 OnItemCommand 处理每个按钮单击。

      【讨论】:

      • 它是 asp.net mvc。转发器仅适用于 asp.net 网络表单。第一个标签可能有点误导。
      【解决方案6】:

      我认为在这种情况下你应该使用 javascript,每行的所有或每个表单只使用一个表单,每个按钮不应该每个表单。

      <input type=button onclick="do_action_one(row_i_value1, ....)" ... />
      <input type=button onclick="do_action_two(row_i_value1, ....)"... />
      <input type=button onclick="do_action_three(row_i_value1, ....)"... />
      

      【讨论】:

        【解决方案7】:

        Supporting multiple submit buttons on an ASP.NET MVC view

        检查此解决方案! 我喜欢这种模式,因为符合 MVC 风格。

        【讨论】:

        • 链接的文章其实挺有意思的!如果答案不依赖于链接后的读者,我会投票赞成。
        【解决方案8】:

        有两个现实的选择。

        1. 使用多种形式
        2. 使用一个大表单并提供each submit button a different name,这会导致一些冗长的服务器端代码,但可以。

        还有其他选择,但它们有局限性。

        1. 依赖于 JavaScript 违反 rule 2
        2. 无法使用有效标记实现每个表格行一个表单。
        3. &lt;button&gt; 元素与一个大表单一起使用可以让您拥有合理的标签和值,但会在 Internet Explorer 中中断(直到版本 8 IIRC)。

        我正在假设您希望对每一行进行“删除”和“编辑”之类的操作,并希望避免“删除第 1 行”、“编辑第 1 行”等。如果这是一个不正确的假设,那么它可能是你可以有一个大表单,使用&lt;input type="submit"&gt; 并有一致的名称和合理的值。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-10-04
          • 1970-01-01
          • 2012-01-23
          • 1970-01-01
          • 1970-01-01
          • 2014-09-28
          • 1970-01-01
          相关资源
          最近更新 更多