多行有多个提交按钮,我应该为每个按钮创建一个表单吗?

时间:2010-01-28 22:12:04

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

我列出了大约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 个答案:

答案 0 :(得分:1)

我使用的是jQuery回发而不是表单,但这取决于你在控制器中做了什么。

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

例如,如果按钮是Create,Delete和Update,则使用单个表单,转到另一个ActionResult。

它的行应该是局部视图恕我直言,你应该有一个单一的表格。

答案 1 :(得分:1)

从您发布的代码片段中,我将假设您并不关心实际向您的操作提交任何表单数据 - 只需调用正确的操作(可能有一些数据可以直接在动作网址,如id / index)

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

如果您确实需要将表单数据提交到您的操作,只需将提交按钮设置为相同的名称和不同的值,然后检查(或让您的模型绑定器完成)确切地调用了哪个操作让你的管制员采取相应的行动。

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

答案 2 :(得分:1)

Supporting multiple submit buttons on an ASP.NET MVC view

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

答案 3 :(得分:0)

没有。 Asp.net HATES 看到多种形式。只需给按钮一个不同的ID /名称/值等。

答案 4 :(得分:0)

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

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

答案 5 :(得分:0)

这不是asp.net的问题吗?你能不能使用转发器,datalist,datagrid?然后,您可以使用控件OnItemCommand处理每个按钮单击。

答案 6 :(得分: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, ....)"... />

答案 7 :(得分:0)

有两个现实的选择。

  1. 使用多种形式
  2. 使用一个大表单并提供each submit button a different name,这会产生一些冗长的服务器端代码,但可以正常工作。
  3. 还有其他选择,但它们有局限性。

    1. 根据JavaScript违反rule 2
    2. 使用有效标记无法实现每个表行的一种形式。
    3. 使用一个大表单的<button>元素可以让您拥有合理的标签和值,但是在Internet Explorer中会出现中断(直到版本8 IIRC)。
    4. 我正在假设您希望每行都有“删除”和“编辑”之类的内容,并希望避免“删除第1行”,“编辑第1行”等。如果这是一个不正确的假设,那么它可能是你可以有一个大的形式,使用<input type="submit">并且具有一致的名称和合理的价值。