返回View中的ASP.Net MVC表单操作

时间:2010-09-23 14:46:12

标签: asp.net-mvc routes

尽可能简单: -

我有一个控制器可以返回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之间的中途

2 个答案:

答案 0 :(得分:2)

这是路由表中的问题。路由引擎无法找到路径对此动作\控制器的满足,只需将theese参数放入查询字符串即可。

答案 1 :(得分:2)

你有一个名为ViewB的行动吗?如果没有,路由引擎无法理解您要求的内容,并将额外的变量附加到目标的查询字符串。一个呈现两个不同视图的操作很好,但是如果您希望ViewBPOST不同于ViewA,则需要在控制器中为ViewB执行操作。< / p>

编辑:进一步澄清,如果始终应调用ViewA 操作,则您不需要ViewB 操作,并且您的ViewB 视图应该回发到ViewA 操作

如果ViewB 视图需要执行与您的ViewA 视图不同的操作,那么您需要为ViewBPOST创建另一个操作

很抱歉所有的大胆,但我只是想明确行动和观点之间的区别。