我正在使用两个操作,一个用于我的请求的获取部分(一个通用的查找网址),另一个用于帖子。
如果帖子有ModelState错误,我想查看返回显示错误,但我希望网址是通用网址。
所以这就是目前发生的事情:
Get: http://foo.com/mycontroller
Post: http://foo.com/mycontroller/specificviewaction (validation error occurs)
Resultant url is: http://foo.com/mycontroller/specificviewaction
我希望http://foo.com/mycontroller适当的错误。
这是我目前的代码:
public ActionResult Index()
{
// ... do stuff
return View("specificviewaction ", model);
}
[HttpPost]
public ActionResult specificviewaction(Model model)
{
if (ModelState.IsValid)
{
// ... do stuff
}
return View("specificviewaction", model);
}
注意,没有实际的索引视图,只有特定的视图。
答案 0 :(得分:0)
删除索引操作 - 您不需要它。 而不仅仅是为Get:
添加一个specificviewaction[HttpGet]
public ActionResult specificviewaction()
{
//do smth
return View("specificviewaction", model);
}
并将以下路由器添加到Global.asax(默认路由之前):
routes.MapRoute("MyControllerRoute", // Route name
"MyController/{action}/{id}", // URL with parameters
new { controller = "MyController", action = "specificviewaction", id = UrlParameter.Optional } // Parameter defaults);
在此网址之后,“/ MyController /”将默认指向您的“specificviewaction”。
答案 1 :(得分:0)
这就是我最终要做的事情。
我按照默认实现离开了路由表。
然后,对于每种模型类型,我在表单中放置一个隐藏字段,其类型为。
在帖子上,我检查它是什么类型,并使用TryUpdateModel
更新具有正确表单值的模型实例。
如果成功很好,如果不成功,我可以回复相应的错误。
我试图过度思考,最简单的方法是最好的。