MVC ActionResult - Nullable或Optional参数

时间:2016-11-02 16:22:46

标签: c# asp.net-mvc nullable optional-parameters pagedlist

将页码传递给我的MVC操作以获取分页列表时,不需要提供页码。如果未选择页码,则数字默认为第一页 大多数文档似乎都支持使用空合并运算符,例如

Public ActionResult Demo(int? page)
{
    const int pageSize = 10
    var model _db.Model.ToPagedList(page ?? 1, pageSize);
    return View(model);
}

或类似的东西。

我想知道使用默认参数是否有好处,例如。

Public ActionResult Demo(int page = 1)
{
    const int pageSize = 10
    var model _db.Model.ToPagedList(page, pageSize);
    return View(model);
}

甚至

Public ActionResult Demo(int? page = 1)
{
    const int pageSize = 10
    var model _db.Model.ToPagedList(page.Value, pageSize);
    return View(model);
}

虽然在这个实例中将页面作为可空类型似乎是多余的。

特别是使用这些方法之一是否有任何好处,还是仅仅是语法糖。

编辑:修复了第三个例子中的空例外

1 个答案:

答案 0 :(得分:1)

最后一个没有意义Public ActionResult Demo(int? page = 1)

根据您的方案,前两个操作方法不会有任何不同,因为参数是针对页码。 如果没有提供参数,人们希望登陆第一页。

但是,如果您关心该值,则不希望使用可选参数。

public ActionResult UserDetails(int? id)
{
    if (!id.HasValue)
        return View("UserNotFound"); // Or return a message.

    int userId = id.Value; 
    var user = _userService.GetUserById(userId);
    // Do something
}

您无法在上述方案中使用可选参数 - public ActionResult UserDetails(int id = 123)

仅供参考: 您不想使用public ActionResult UserDetails(int id)。如果没有提供id,它将导致崩溃。