是否可以将模型状态错误传递给不同的操作?

时间:2012-08-23 02:31:31

标签: c# asp.net-mvc-3 routing

我正在使用两个操作,一个用于我的请求的获取部分(一个通用的查找网址),另一个用于帖子。

如果帖子有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);
    }

注意,没有实际的索引视图,只有特定的视图。

2 个答案:

答案 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更新具有正确表单值的模型实例。

如果成功很好,如果不成功,我可以回复相应的错误。

我试图过度思考,最简单的方法是最好的。