如何在MVC中将参数默认为Guid.Empty?

时间:2012-04-19 13:20:28

标签: asp.net-mvc asp.net-mvc-3 model-view-controller

对于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() )
        {
----
----
}

4 个答案:

答案 0 :(得分:6)

尝试使用nullable Guid作为参数:

public ActionResult Index(string userAction, Guid? uid = null)

根据您的评论,假设objModel.IdGuid,您可以使用:

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操作方法参数传递nullGuid?