我是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
}
您会以不同方式处理这些案件吗?如果是,怎么样?
答案 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
获取它。