C# 结尾处的可选参数,但仍出现错误

C# 结尾处的可选参数,但仍出现错误,c#,asp.net,asp.net-mvc,optional-parameters,C#,Asp.net,Asp.net Mvc,Optional Parameters,我在C#V.4中有一个非常简单的函数,在这个函数中page是一个可选参数,即我通常调用mysite.com/product/PaginationOfProducts/20但是对于某些分页控件,我必须调用mysite.com/product/PaginationOfProducts/20?page=2,但是在构建我的解决方案时,我得到了所有必需参数之后必须出现可选参数的错误 public ActionResult PaginationOfProducts(int id = 0, int ? pa

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

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

我不明白VS是如何决定
page
不是我的可选参数的,即使我将它定义为
null-able-int
非常简单,错误说明了一切。 将方法签名更改为

public ActionResult PaginationOfProducts( int? page, int id = 0)
public ActionResult PaginationOfProducts( int id = 0, int? page = null)
因此,请确保可选参数出现在所需参数之后。 页面不是可选参数,因为它没有(显式)默认值,所以您无法对其进行操作

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

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

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

您需要为页面指定一个默认值

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

int?
默认为
null
无需将其设置为
null
again@StephenMuecke:如果要将其定义为可选参数,则有。@StephenMuecke,请理解变量的默认值与选项参数的默认值之间的差异;对于
void Func(){int?page;}
页面将为空,而
void Func(int?page)
页面在调用Func时必须提供。@ColinGrealy,我理解,但这是一个路由问题,应该在
RouteConfig
文件(
page=UrlParameter.Optional
)中处理。@StephenMuecke,如果代码没有编译,路由配置就没有用!您是否使用任何特定路线?-您应该有
url:…/{id}/{page}
page=UrlParameter。可选的
可选参数在运行时是“可选的”,因为您在编译时提供了一个值。简单地将nullable作为最终参数并不意味着它是可选的,因为您要求编译器为您决定哪一个是不好的。