【问题标题】:Optional parameter at the end but still getting error最后的可选参数但仍然出现错误
【发布时间】:2015-10-21 20:43:55
【问题描述】:

我在C# V.4 中有一个非常简单的函数,在这个函数中page 是一个可选参数,即我通常调用mysite.com/product/PaginationOfProducts/20 但对于某些分页控件我必须调用mysite.com/product/PaginationOfProducts/20?page=2 但在构建我的解决方案时我得到了optional parameters must appear after all required parameters的错误

public ActionResult PaginationOfProducts(int id = 0,  int ? page)
        {
// do something
}

我不明白 VS 是如何决定 page 不是我的可选参数,即使我将它定义为 null-able int

【问题讨论】:

  • 您是否使用任何特定路线? - 你应该有url: .../{id}/{page}page = UrlParameter.Optional
  • 可选参数在运行时是“可选的”,因为您在编译时提供了一个值。简单地将可空值作为您的最终参数并不会使其成为可选参数,因为您要求编译器为您决定哪个不好。

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


【解决方案1】:

你需要给页面一个默认值

public ActionResult PaginationOfProducts(int id = 0,  int? page = null)
{
    // do something
}

【讨论】:

  • int? 默认为null 无需再次设置为null
  • @StephenMuecke:如果您想将其定义为可选参数。
  • @StephenMuecke,了解变量默认值和选项参数默认值的区别;对于void Func() { int? page; } 页面将为空,而在调用 Func 时必须提供void Func(int? page) 页面。
  • @ColinGrealy,我明白,但这是一个路线问题,应该在 RouteConfig 文件中处理 (page = UrlParameter.Optional)
  • @StephenMuecke,如果代码不编译,路由配置是没有用的!
【解决方案2】:

很简单,错误说明了一切。 将您的方法签名更改为

public ActionResult PaginationOfProducts( int? page, int id = 0)

因此,请确保可选参数出现在必需参数之后。 page 不是可选参数,因为它没有(显式)默认值,因此您不能省略它。

您也可以将方法签名更改为

public ActionResult PaginationOfProducts( int id = 0, int? page = null)

这样做,页面参数也是一个可选参数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-09
    • 2019-06-01
    • 2019-11-29
    • 2016-10-20
    • 2017-12-20
    • 2021-09-21
    • 1970-01-01
    相关资源
    最近更新 更多