【问题标题】:How do I default a parameter to Guid.Empty in MVC?如何在 MVC 中将参数默认为 Guid.Empty?
【发布时间】:2012-05-01 00:32:18
【问题描述】:

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

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

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

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

【问题讨论】:

  • 尽管您将获得有关如何管理可空类型可选参数的答案,但您确定根据索引操作上的参数选择操作(编辑或删除)是否正确你的控制器?在我看来,您应该有专门的操作
  • 当我们将 uid 作为 Guid 时,我如何执行 if (uid>0) 之类的操作?目前我正在检查 if (objModel.Id != null) 是否不起作用
  • 我在一个正确的答案中回答了......但据我所知,关键是您采用了错误的方法

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


【解决方案1】:

尝试使用nullable Guid 作为您的参数:

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

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

objModel.Id != default(Guid)

但是,现在对您的情况有了更多了解,我会期待 themarcuz 的回答以获得更好的整体解决方案。

【讨论】:

  • 它采用默认值,例如 0000-0000-0000-0000 not null :(
  • 当我们将 uid 作为 Guid 时,我如何执行 if (uid>0) 之类的操作?目前我正在检查 if (objModel.Id != null) 是否不起作用
【解决方案2】:

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

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

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

Index()Index(Guid guid)

【讨论】:

  • 当我们将 uid 作为 Guid 时,我该如何执行 if (uid>0) 之类的操作?目前我正在检查 if (objModel.Id != null) 是否不起作用
  • 虽然不清楚,但我认为您正在尝试处理您期望 guid 的默认操作和发布操作。这正是我建议你做的。在您的默认操作中,您不希望有一个 guid,而当您发布时,您希望在同一操作中有一个 guid。此外,您可以尝试将 uid 解析为 guid,然后根据需要继续。
【解决方案3】:

您应该评估调用者视图中的条件,并调用两个不同的操作,一个用于编辑,一个用于删除。 类似的东西(在调用者的视图中):

@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
}

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

【讨论】:

    【解决方案4】:

    您可以创建一个自定义模型绑定器,将 Guid.Empty 值而不是 null 传递给 Guid? 操作方法参数。

    【讨论】:

      猜你喜欢
      • 2011-07-04
      • 1970-01-01
      • 2011-07-29
      • 2010-10-19
      • 1970-01-01
      • 2013-01-22
      • 1970-01-01
      • 2012-08-01
      • 1970-01-01
      相关资源
      最近更新 更多