asp.net mvc以相同的形式发布到不同的视图

时间:2008-10-29 01:23:47

标签: asp.net-mvc model-view-controller

我的视图中有表格区域。如果我点击按钮 A ,我想提交到/Books/1,如果我点击按钮 B ,我想提交到/Books/2

如何使用MVC实现这一目标?

4 个答案:

答案 0 :(得分:3)

<form id="form1" name="form1" action="/Books/" method="get">
<input type="text" name="search" value="">
<input type="submit" name="id" value="1">
<input type="submit" name="id" value="2">
</form>

答案 1 :(得分:1)

MVC视图可以在“页面”上有多个表单,因此只需创建单独的部分并为每个部分提供自己的表单操作。

<form id="form1" name="form1" action="/Books/1" method="get">
<!--...form fields-->
</form>


<form id="form2" name="form2" action="/Books/2" method="get">
<!--...form fields-->
</form>

答案 2 :(得分:1)

听起来你想要做的就是调用Books Controller,比如搜索动作。例如,您可能需要调用/ Books / Search /&lt; search expression&gt; / 1,或/ Books / Search /&lt; search expression&gt; / 2等。(您可以通过几种不同的方式格式化这些URL,但这主要是个人偏好的问题我认为)如果你想让URL出现在你上面的那些(没有URL中的动作),那就可以用路由完成,如下所示:

routes.MapRoute(
    "Books",
    "Books/{searchExpr}/{pageId}",
    new { controller = "Books", action = "Search", searchExpr = "", pageId = 1 }
);

我认为主要的问题是你在尝试使用WebForms PostBack所有范例时,你可能最好在URL或查询字符串中将信息发送到服务器。您实际上要在此处发布表单数据的唯一时间是用户实际在搜索框中输入内容并单击搜索按钮 - 此时,控制器会将搜索表达式传递给通过在ViewData中填充适当的View,从那里,View可以将其拉出并在结果页面上重新填充该文本框。

答案 3 :(得分:0)

我从未见过将表单字段附加到两个表单的能力,似乎它不起作用。您可以做的是在第二种形式中放置一个隐藏字段,在提交时,从第一种形式的文本框中获取信息。