1

对于索引操作,我需要传递 Guid 但它应该为空,因为我正在检查它的编辑或删除操作。

我曾经这样使用过,但出现编译错误:Guid 不能为 null 必须是编译时间常数。或运行时错误:

参数字典包含“Mapping.Controllers.HomeController”中方法“System.Web.Mvc.ActionResult Index(System.String, System.Guid)”的不可空类型“System.Guid”的参数“uid”的空条目'。可选参数必须是引用类型、可空类型或声明为可选参数。

public ActionResult Index(string userAction, Guid uid = new Guid() )
        {
----
----
}
4

4 回答 4

6

尝试为您的参数使用可空 Guid值:

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

根据您的评论,假设objModel.Id是 a Guid,您可以使用:

objModel.Id != default(Guid)

但是,现在更多地了解您的情况,我会寻找themarcuz更好的整体解决方案的答案。

于 2012-04-19T13:22:48.093 回答
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
}

即使我不明白如何在不传递任何参数的情况下删除某些内容...

于 2012-04-19T13:36:58.400 回答
0

您可以在路由中将该参数指定为可选。

routes.MapRoute(
                "Default", // Route name
                "{controller}/{action}/{guid}", // URL with parameters
                new {controller = "DefaultController", action = "Index", guid = UrlParameter.Optional});

之后,您不必将 guid 作为 Index 操作中的参数,或者您可以同时拥有这两个操作,例如

Index()Index(Guid guid)

于 2012-04-19T13:23:40.573 回答
0

您可以创建一个自定义模型绑定器,该绑定器为操作方法参数传递一个Guid.Empty值。nullGuid?

于 2012-04-19T14:06:06.117 回答