我已经定义了这条规则:
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)
{
//...
}
答案 0 :(得分:0)
就路线和路线匹配而言,它是可选的。但是,如果您不允许该参数的空值进入您的函数,那么该函数将指示该特定值不能为null。因此,如果该值不存在,则路由将匹配,但由于该函数未设置为采用null(或可选值(如int id = 0)),因此它将失败并显示空引用异常。
至于为什么将它作为一个类传递,这是因为未初始化的整数的默认值是0(但是,int?默认值为null)。所以,它有一个价值,即使你从来没有给它一个只是因为#34; newed"起来。