多行有多个提交按钮,我是否需要为每个按钮创建一个表单?

3

我列出了大约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个表单)

这样做可以吗?(还是有更好的方法可以做到这一点?)

8个回答

1

我会使用 jQuery postback 而不是表单,但这取决于您的控制器正在做什么。

如果您能扩展问题以包括该细节,那将非常方便。

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

在我看来,它的行应该是一个部分视图,并且您应该只有一个表单。


你的意思是将表单提交到一个单一的操作,然后让该操作结果根据提交按钮的名称重定向到另一个操作? - Blankman
这完全取决于您的按钮要执行什么操作,我们目前不清楚。如果每个按钮表示一个删除行的操作,那么我会将其发布到同一操作,传递ID并在该操作中处理删除。然后,我会有一个编辑操作并在那里进行处理。因此,我不会重定向,而是让按钮调用特定的操作。 - griegs

1

从您发布的代码片段来看,我猜测您并不关心向操作提交任何表单数据,只是调用正确的操作(可能会有一些可以直接在操作URL中指定的数据,例如ID /索引)

如果是这种情况,那么您甚至不需要为此使用提交按钮。只需使用普通链接(您可以自己或使用jQueryUI样式将其设置为按钮,从而使事情简单漂亮)

如果您确实需要向操作提交表单数据,请给您的提交按钮相同的名称和不同的值,然后检查(或让您的模型绑定器解决)哪个按钮调用了操作,并让您的控制器相应地处理。

请查看这里(第二个答案,哈哈,被接受的答案实际上使用了多种形式),以及这里(这个链接实际上使用了一些花哨的东西,可能有点过度设计,在生成未知数量的提交按钮时不太合适,但仍然很有趣)


0
我认为在这种情况下应该使用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, ....)"... />

0

不行。Asp.net非常讨厌看到多个表单。只需为按钮提供不同的ID /名称/值或其他内容。


它是MVC,而不是老派的ASP.NET。 - Jan Jongboom

0

不,不,不。多个表单是一个坏主意。是的,你可以这样做。但是,你会遇到奇怪的行为,比如“当用户按下回车键时会发生什么?”

每个浏览器在同一HTML文档中看到多个表单时处理方式略有不同。为了避免麻烦,请以不同的方式处理。


关于用户在文本输入框中按回车键提交表单时,有一些不一致的地方……但对于在一个文档中有多个表单,则没有这样的情况。 - Quentin

0

这不是一个asp.net的问题吗?你不能使用repeater、datalist或datagrid吗?这样你就可以使用控件的OnItemCommand来处理每个按钮的点击事件。


这是ASP.NET MVC。Repeaters仅适用于ASP.NET WebForms。第一个标签可能有点误导性。 - Veli Gebrev

0

这篇链接的文章实际上非常有趣!如果答案不依赖于读者跟随链接,我会投票支持它。 - Jørn Schou-Rode

0

有两个现实的选择。

  1. 使用多个表单
  2. 使用一个大表单并给每个提交按钮不同的名称, 这会导致一些冗长的服务器端代码,但可以工作。

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

  1. 依赖JavaScript违反规则2
  2. 每个表格行一个表单无法使用有效的标记实现。
  3. 使用带有一个大表单的<button>元素将让您拥有合理的标签和值,但在Internet Explorer中会出现问题(直到版本8为止)。

我假设您想要每行类似于“删除”和“编辑”的内容,并且想要避免“删除第1行”,“编辑第1行”等。 如果这是错误的假设,则可能是您可以拥有一个大表单,使用<input type="submit">并具有一致的名称和合理的值。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接