1

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

如果帖子有 ModelState 错误,我想查看返回以显示错误,但我希望 url 是通用 url。

这就是目前发生的情况:

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);
    }

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

4

2 回答 2

0

删除索引操作 - 你不需要它。取而代之的是,只需添加一个更具体的视图操作,但对于 Get:

[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);

默认情况下,此 url 之后“/MyController/”将指向您的“specificviewaction”。

于 2012-08-23T02:54:38.743 回答
0

这就是我最终做的。

我按照默认实现离开了路由表。

然后对于每种模型类型,我在表单中放置一个隐藏字段,它是哪种类型。

在帖子中,我检查它是什么类型,并使用TryUpdateModel正确的表单值更新模型实例。

如果它成功了很好,如果没有,我可以返回适当的错误。

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

于 2012-08-30T04:18:00.593 回答