2010-09-23 25 views
2

将保持这种简单的可能: -在返回查看ASP.Net MVC表单操作

我有一个有一个控制器,将返回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")) 

但这返回标记以下网址:

/ViewB?action=ViewB&controller=MyControllerName 

我怎样才能获得HTML辅助正确返回下列?

/MyControllerName/ViewB 

非常感谢

UPDATE

这确实是由一些丑陋的传统从何时该项目是WebForms和MVC之间的中途路由造成

+0

什么HTML在ViewB中呈现? ViewB中的表单是否具有action =“get” – 2010-09-23 14:54:26

+0

“<%= Url.Action(”ViewB“,”MyControllerName“)%>'generate? – Charlino 2010-09-23 17:09:47

回答

2

它的问题在路由表。路由引擎无法找到路由统计此操作\控制器,并简单地将这些参数设置为查询字符串。

2

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

编辑:进一步澄清,如果ViewA行动应该总是叫,那么你并不需要一个ViewB行动,和你的ViewB视图应该只是回发到ViewA行动

如果ViewB视图需要执行不同的动作比你ViewA视图,那么你需要创建ViewB另一个行动POST来。

对不起所有的大胆,但我只是想清楚行动和意见之间的差异。