- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我试图在 Controller 上执行索引操作,以便有选择地采用这样的 guid:
public ActionResult Index(Guid id = default(Guid))
或者像这样
public ActionResult Index(Guid id = new Guid())
我希望利用 C# 的可选参数,我的路由也定义了可选参数:
routes.MapRoute(
"Default", "{controller}/{action}/{id}",
new { controller = "somecontroller", action = "Index", id = UrlParameter.Optional }
但是调用“somecontroller/index”会出现以下错误...
The parameters dictionary contains a null entry for parameter 'id' of non-nullable type 'System.Guid' for method 'System.Web.Mvc.ActionResult Index(System.Guid)' in 'Controllers.SomeController'. An optional parameter must be a reference type, a nullable type, or be declared as an optional parameter
这不可能吗?我错过了什么?谢谢
最佳答案
Guid 不可为空。例如你不能这样做
Guid myGuid = null; // invalid
但是,在 C# 2 中,添加了一些语法糖以使值类型可以为 null(通过将它们包装在 Nullable 对象中),如下所示:
Guid? myGuid = null; // valid. myGuid will be Nullable<Guid>.
根据该规则,让我们看看您的路线:
routes.MapRoute(
"Default", "{controller}/{action}/{id}",
new { controller = "somecontroller",
action = "Index",
id = UrlParameter.Optional // <-- Optional!!
});
由于您在路由中指定了 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
}
}
关于c# - 可以将 Guid 作为 asp.net mvc 3 Controller 操作中的可选参数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5159952/
我正在尝试用 Swift 编写这段 JavaScript 代码:k_combinations 到目前为止,我在 Swift 中有这个: import Foundation import Cocoa e
我是一名优秀的程序员,十分优秀!