and*_*uha 17 c# optional-parameters c#-4.0 asp.net-mvc-3
我试图在控制器上进行索引操作以选择性地采用这样的guid:
public ActionResult Index(Guid id = default(Guid))
Run Code Online (Sandbox Code Playgroud)
或者像这样
public ActionResult Index(Guid id = new Guid())
Run Code Online (Sandbox Code Playgroud)
我希望利用C#的可选参数,我的路由也定义了可选参数:
routes.MapRoute(
"Default", "{controller}/{action}/{id}",
new { controller = "somecontroller", action = "Index", id = UrlParameter.Optional }
Run Code Online (Sandbox Code Playgroud)
但调用"somecontroller/index"会出现以下错误...
参数字典包含'Controllers.SomeController'中方法'System.Web.Mvc.ActionResult Index(System.Guid)'的非可空类型'System.Guid'的参数'id'的空条目.可选参数必须是引用类型,可空类型,或者声明为可选参数
这是不可能的吗?我错过了什么?谢谢
Sco*_*son 30
Guid不可为空.例如,你不能这样做
Guid myGuid = null; // invalid
Run Code Online (Sandbox Code Playgroud)
但是,在C#2中,添加了一些语法糖以使值类型可以为空(通过将它们包装在Nullable对象中),如下所示:
Guid? myGuid = null; // valid. myGuid will be Nullable<Guid>.
Run Code Online (Sandbox Code Playgroud)
鉴于这条规则,让我们来看看你的路线:
routes.MapRoute(
"Default", "{controller}/{action}/{id}",
new { controller = "somecontroller",
action = "Index",
id = UrlParameter.Optional // <-- Optional!!
});
Run Code Online (Sandbox Code Playgroud)
由于您在路由中指定id参数是可选的,因此必须使用可以是的类型null,或者必须在操作中完全省略该参数.因此,要修复您的操作,您需要更改Guid id参数Guid? id,它应该工作.之后,您可以检查该值以确保它不是null,如下所示:
public ActionResult Index(Guid? id) {
if (id.HasValue) {
// it's not null, so I can call "id.Value" to get the Guid
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
17885 次 |
| 最近记录: |