C# 是否可以将modelstate错误传递给其他操作?
我使用了两个操作,一个用于请求的get部分(一个通用url),另一个用于帖子 如果帖子有ModelState错误,我希望查看返回以显示错误,但我希望url是通用url 这就是目前发生的情况:C# 是否可以将modelstate错误传递给其他操作?,c#,asp.net-mvc-3,routing,C#,Asp.net Mvc 3,Routing,我使用了两个操作,一个用于请求的get部分(一个通用url),另一个用于帖子 如果帖子有ModelState错误,我希望查看返回以显示错误,但我希望url是通用url 这就是目前发生的情况: Get: http://foo.com/mycontroller Post: http://foo.com/mycontroller/specificviewaction (validation error occurs) Resultant url is: http://foo.com/mycon
Get: http://foo.com/mycontroller
Post: http://foo.com/mycontroller/specificviewaction (validation error occurs)
Resultant url is: http://foo.com/mycontroller/specificviewaction
我希望它是适当的错误
这是我目前的代码:
public ActionResult Index()
{
// ... do stuff
return View("specificviewaction ", model);
}
[HttpPost]
public ActionResult specificviewaction(Model model)
{
if (ModelState.IsValid)
{
// ... do stuff
}
return View("specificviewaction", model);
}
注意,没有实际的索引视图,只有特定视图。删除索引操作-您不需要它。 除此之外,只需再添加一个specificviewaction,但对于Get:
[HttpGet]
public ActionResult specificviewaction()
{
//do smth
return View("specificviewaction", model);
}
并将以下路由器添加到Global.asax(默认路由之前):
在此url之后,默认情况下“/MyController/”将指向您的“specificviewaction”。这就是我最后要做的 我按照默认实现保留了路由表 然后,对于每种模型类型,我将在其所属类型的表单中放置一个隐藏字段 在帖子中,我检查它是什么类型,并使用
TryUpdateModel
使用正确的表单值更新模型实例
如果它成功了,那就很好,如果不成功,我可以将适当的错误返回
我试着仔细考虑,最简单的方法是最好的。这是我试图避免的,我希望用户不要看到细节,而是始终看到通用url。您希望显示哪个url?用户将始终只看到“”所以。。有了这个决定,用户总是只能看到“foo.com/mycontroller”。抱歉-无法理解此解决方案的错误。是的,基本上我有多个类型可供用户编辑,它们实际上只是同一系统的一部分,为了提供更好的用户体验,它们看起来都是相同的“类型”
routes.MapRoute("MyControllerRoute", // Route name
"MyController/{action}/{id}", // URL with parameters
new { controller = "MyController", action = "specificviewaction", id = UrlParameter.Optional } // Parameter defaults);