使用无效的Id参数处理操作

时间:2011-12-10 20:14:04

标签: asp.net-mvc asp.net-mvc-3

我是ASP.NET MVC的新手,我想知道我处理这些案例的方式是否最合适。

我有一个“ArticleController”,它有一个名为“Details”的动作(使用自动生成编辑模板)。

默认情况下,路由表中有一个可选的id, 我想知道当我没有收到任何ID或收到错误的id参数时如何处理这些情况。

为了解决这个问题,我写了这个(注意DefaultValue属性):

        public ViewResult Details([DefaultValue(0)]int id)
    {
        Article article = db.Articles.Find(id);

        if (article == null)
        {
            return View();
        }
        return View(article);
    }

在我看来我写道:

@if (Model == null)
{
    <div>Wrong article id was given.</div>
}
else
{
    // Handle as a normal case
}

您会以不同方式处理这些案件吗?如果是,怎么样?

2 个答案:

答案 0 :(得分:4)

我认为最干净的方法是设置您的路由,以便在没有ID时,将用户路由到不同的操作。这就是默认路由的作用。例如:/Articles/将调用ArticleController::Index()/Articles/4将调用ArticleController::Details(4)

就个案未找到ID的情况而言,我个人更喜欢返回404错误:

return new HttpNotFoundResult("This doesn't exist");

答案 1 :(得分:1)

你可以像这样使你的Id可以为空:

public ViewResult Details(int? id)

如果用户未提供任何ID或不正确的ID,则该ID将不具有您可以使用id.HasValue检查的值。如果id具有值,则可以使用id.Value获取它。