尽可能简单: -
我有一个控制器可以返回ViewA或ViewB - 例如
[HttpPost]
public ActionResult ViewA(BlahModel model)
{
if (isTrue)
return View(model);
else
return View("ViewB", model);
}
...
我遇到的问题是ViewB上有一个表单。会发生什么,如果它被返回,标签的action属性仍然指向ViewA。
/MyControllerName/ViewA
我以为我可以这样做:
using (Html.BeginForm("ViewB","MyControllerName"))
但是这会在标记中返回以下URL:
/ViewB?action=ViewB&controller=MyControllerName
如何让HTML帮助程序正确返回以下内容?
/MyControllerName/ViewB
非常感谢
更新
这确实是由一些丑陋的遗留路由引起的,当时项目是WebForms和MVC之间的中途
答案 0 :(得分:2)
这是路由表中的问题。路由引擎无法找到路径对此动作\控制器的满足,只需将theese参数放入查询字符串即可。
答案 1 :(得分:2)
你有一个名为ViewB
的行动吗?如果没有,路由引擎无法理解您要求的内容,并将额外的变量附加到目标的查询字符串。一个呈现两个不同视图的操作很好,但是如果您希望ViewB
与POST
不同于ViewA
,则需要在控制器中为ViewB
执行操作。< / p>
编辑:进一步澄清,如果始终应调用ViewA
操作,则您不需要ViewB
操作,并且您的ViewB
视图应该回发到ViewA
操作。
如果ViewB
视图需要执行与您的ViewA
视图不同的操作,那么您需要为ViewB
到POST
创建另一个操作。
很抱歉所有的大胆,但我只是想明确行动和观点之间的区别。