在我看来,我有表单区域。如果我点击按钮A,我想提交/Books/1
,如果我点击按钮B,我想提交给/Books/2
如何使用 MVC 实现这一目标?
在我看来,我有表单区域。如果我点击按钮A,我想提交/Books/1
,如果我点击按钮B,我想提交给/Books/2
如何使用 MVC 实现这一目标?
<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>
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>
听起来你想做的是调用 Books Controller,比如 Search 操作。因此,例如,您可能想要调用 /Books/Search/<search expression>/1 或 /Books/Search/<search expression>/2 等(有几种不同的方法可以格式化这些 URL,但它是我认为主要是个人喜好问题)如果您希望 URL 像上面那样显示(没有 URL 中的操作),可以通过路由来完成,如下所示:
routes.MapRoute(
"Books",
"Books/{searchExpr}/{pageId}",
new { controller = "Books", action = "Search", searchExpr = "", pageId = 1 }
);
我认为主要问题是您尝试使用 WebForms PostBack 一切范式,在这种情况下您可能最好将信息通过 URL 或查询字符串发送到服务器。您真正要在此处发布表单数据的唯一时间是用户实际在搜索框中键入内容并单击Search按钮 - 此时,控制器将通过将搜索表达式填充到 ViewData 中将其传递给适当的视图,从那里,视图可以将其拉出并重新填充结果页面上的该文本框。
我从未见过将表单域附加到两个表单的能力,似乎它不起作用。您可以做的是在第二个表单中放置一个隐藏字段,该字段在提交时从第一个表单的文本框中获取信息。