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

Asp.net mvc 如何在MVC中将参数默认为Guid.Empty?,asp.net-mvc,asp.net-mvc-3,model-view-controller,Asp.net Mvc,Asp.net Mvc 3,Model View Controller,对于索引操作,我需要传递Guid,但当我检查它是否为编辑或删除操作时,它应该为null 我这样使用过,但得到编译错误:Guid不能为null必须是编译时常量。 或运行时错误: 参数字典包含“Mapping.Controllers.HomeController”中方法“System.Web.Mvc.ActionResult Index(System.String,System.Guid)”的非null类型“System.Guid”的参数“uid”的null条目。可选参数必须是引用类型、可为null

对于索引操作,我需要传递Guid,但当我检查它是否为编辑或删除操作时,它应该为null

我这样使用过,但得到编译错误:Guid不能为null必须是编译时常量。 或运行时错误:

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

尝试对参数使用
Guid

public ActionResult Index(string userAction, Guid? uid = null)
根据您的评论,假设
objModel.Id
Guid
,您可以使用:

objModel.Id != default(Guid)
但是,现在我了解了更多关于您的情况,我会参考
themarcuz
的答案来寻找更好的整体解决方案。

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

public ActionResult Index(string userAction, Guid? uid = null)
根据您的评论,假设
objModel.Id
Guid
,您可以使用:

objModel.Id != default(Guid)

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

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

routes.MapRoute(
                "Default", // Route name
                "{controller}/{action}/{guid}", // URL with parameters
                new {controller = "DefaultController", action = "Index", guid = UrlParameter.Optional});
之后,您不必在索引操作中使用guid作为参数,也可以同时使用这两种操作,如


Index()
索引(Guid)

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

routes.MapRoute(
                "Default", // Route name
                "{controller}/{action}/{guid}", // URL with parameters
                new {controller = "DefaultController", action = "Index", guid = UrlParameter.Optional});
之后,您不必在索引操作中使用guid作为参数,也可以同时使用这两种操作,如


Index()
索引(Guid)

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

然后在控制器中,您将有不同的操作:

public ActionResult Edit(Guid myGuid)
{
    // do something here
}
public ActionResult Delete()
{
    // do something here
}

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

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

然后在控制器中,您将有不同的操作:

public ActionResult Edit(Guid myGuid)
{
    // do something here
}
public ActionResult Delete()
{
    // do something here
}

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

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

您可以创建一个传递
Guid.Empty
值的自定义模型绑定器相反,对于
Guid?
操作方法参数,

它采用默认值,如0000-0000-0000-0000 not null:(我如何执行类似if(uid>0)的操作,然后在uid作为Guid时进行编辑或删除???目前我正在检查like if(objModel.Id!=null)这是不起作用的,它采用了默认值,如0000-0000-0000-0000 not null:(当我们使用uid作为Guid时,我如何做if(uid>0),然后进行编辑或删除???目前我正在检查if(objModel.Id!=null)这是不起作用的,尽管您将得到关于如何管理可空类型可选参数的答案,但您确定根据控制器的索引操作上的参数选择操作(编辑或删除)是正确的做法吗?我觉得您应该有专用的操作显示我可以执行类似if(uid>0)的操作吗当我们将uid作为Guid时,是否进行编辑或删除???当前我正在检查是否(objModel.Id!=null)这不起作用我用正确的答案回答…但问题是,据我所知,你采用的方法是错误的尽管你会得到关于如何管理可空类型可选参数的答案,你确定选择操作(编辑或删除)是正确的吗基于控制器的索引操作上的参数?我觉得你应该有专用的Actionshow,我能做一些类似if(uid>0)的事情吗?然后在我们有uid作为Guid时进行编辑或删除吗???目前我正在检查if(objModel.Id!=null)这不起作用我用一个正确的答案回答…但问题是,据我所知,你采用了错误的方法。我怎么能做一些像if(uid>0)这样的事情呢?当我们使用uid作为Guid时,我怎么做编辑或删除呢???目前我正在检查if(objModel.Id!=null)虽然不清楚,但这不起作用,但我认为您正在尝试处理默认操作和需要guid的post操作。这正是我建议您要做的。在默认操作中,您不需要guid,并且在发布时,您需要在同一个操作中使用guid。此外,您可以尝试将uid解析为guid,然后再将其转换为proceed如您所愿。当我们使用uid作为Guid时,如何执行类似if(uid>0)的操作,然后执行编辑或删除???当前我正在检查if(objModel.Id!=null)虽然不清楚,但这不起作用,但我认为您正在尝试处理默认操作和需要guid的post操作。这正是我建议您要做的。在默认操作中,您不需要guid,并且在发布时,您需要在同一个操作中使用guid。此外,您可以尝试将uid解析为guid,然后再将其转换为pro你想怎么做就怎么做。