路线选项参数不起作用

时间:2014-05-14 02:49:28

标签: asp.net-mvc asp.net-mvc-4 routes

我已经定义了这条规则:

routes.MapRoute(
    name: "NameOfRule",
    url: "general-list/all-operation/{typeEstate}/{page}",
    defaults: new { controller = "PropertyListings", action = "Sale", page = UrlParameter.Optional },
    namespaces: new[] { ControllerName.Namespace }
);

public ActionResult Sale(string typeEstate, int page)
{
    //...
}

如果我传递参数page,这样可以正常工作,但是如果我不这样做会失败,错误是“你需要page或者它必须为空(int? )“

我不明白,因为我假设参数page是可选的。当然,如果我得到一个班级改变,这是正常的:

public class MyModel
{
    public string TypeEstate { get; set; }

    public int Page { get; set; }
}

public ActionResult Sale(MyModel model) //string typeEstate, int page)
{
   //...
}

1 个答案:

答案 0 :(得分:0)

就路线和路线匹配而言,它是可选的。但是,如果您不允许该参数的空值进入您的函数,那么该函数将指示该特定值不能为null。因此,如果该值不存在,则路由将匹配,但由于该函数未设置为采用null(或可选值(如int id = 0)),因此它将失败并显示空引用异常。

至于为什么将它作为一个类传递,这是因为未初始化的整数的默认值是0(但是,int?默认值为null)。所以,它有一个价值,即使你从来没有给它一个只是因为#34; newed"起来。