【发布时间】:2010-09-19 17:12:46
【问题描述】:
我的视图中有表单区域。如果我点击按钮A,我想提交给/Books/1,如果我点击按钮B,我想提交给/Books/2
如何使用 MVC 实现这一点?
【问题讨论】:
标签: asp.net-mvc model-view-controller
我的视图中有表单区域。如果我点击按钮A,我想提交给/Books/1,如果我点击按钮B,我想提交给/Books/2
如何使用 MVC 实现这一点?
【问题讨论】:
标签: asp.net-mvc model-view-controller
<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>
【讨论】:
听起来你想做的是调用 Books Controller,比如 Search 操作。因此,例如,您可能想要调用 /Books/Search/
routes.MapRoute(
"Books",
"Books/{searchExpr}/{pageId}",
new { controller = "Books", action = "Search", searchExpr = "", pageId = 1 }
);
我认为主要问题是您尝试使用 WebForms PostBack Everything 范式,在这种情况下您最好通过 URL 或查询字符串将信息发送到服务器。您真正要在此处发布表单数据的唯一一次是用户在搜索框中实际输入内容并单击 Search 按钮 - 此时,控制器会将搜索表达式传递给通过将其填充到 ViewData 中来获得适当的视图,然后视图可以从那里将其拉出并重新填充结果页面上的该文本框。
【讨论】:
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>
【讨论】:
我从未见过将表单域附加到两个表单的功能,似乎无法正常工作。您可以做的是在第二个表单中放置一个隐藏字段,该字段在提交时从第一个表单的文本框中获取信息。
【讨论】: