对于Index操作我需要传递Guid,但它应该为null,因为我正在检查它是否有编辑或删除操作。
我已经这样使用了但是得到了编译错误:Guid不能为null必须是编译时间常量。 或运行时错误:
参数字典在'Mapping中为方法'System.Web.Mvc.ActionResult Index(System.String,System.Guid)'包含非可空类型'System.Guid'的参数'uid'的空条目。 Controllers.HomeController”。可选参数必须是引用类型,可空类型,或者声明为可选参数。
public ActionResult Index(string userAction, Guid uid = new Guid() )
{
----
----
}
答案 0 :(得分:6)
尝试使用nullable Guid
作为参数:
public ActionResult Index(string userAction, Guid? uid = null)
根据您的评论,假设objModel.Id
是Guid
,您可以使用:
objModel.Id != default(Guid)
但是,现在了解您的情况,我会寻求themarcuz
的答案以获得更好的整体解决方案。
答案 1 :(得分:1)
您应该在调用者的视图中评估条件,并调用两个不同的操作,一个用于编辑,一个用于删除。 类似的东西(在来电者的视图中):
@if (existGuid)
{
@Html.ActionLink("Edit", "Edit", new {myGuid = guid})
}
else
{
@Html.ActionLink("Delete", "Delete")
}
然后在你的控制器中,你会有不同的动作:
public ActionResult Edit(Guid myGuid)
{
// do something here
}
public ActionResult Delete()
{
// do something here
}
即使我不明白如何在不传递任何参数的情况下删除某些内容......
答案 2 :(得分:0)
您可以在路线中指定该参数为可选项。
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{guid}", // URL with parameters
new {controller = "DefaultController", action = "Index", guid = UrlParameter.Optional});
之后,您不必将guid作为索引操作中的参数,或者您可以同时执行这两项操作
Index()
和Index(Guid guid)
答案 3 :(得分:0)
您可以创建一个自定义模型活页夹,为Guid.Empty
操作方法参数传递null
值Guid?
。