具有可选Guid参数的View的MVC控制器方法

时间:2018-11-01 16:28:45

标签: c# asp.net-mvc

我试图通过从菜单直接进入该视图或单击将带我到同一视图但具有参数和特定链接信息的链接来访问MVC视图,而不是看到一般页面,如果我直接进入的话。

public ActionResult Roles(Guid applicationId)
    {
        if (applicationId == Guid.Empty)
        {
            return View();
        }

        var application = new ApplicationStore().ReadForId(applicationId);

        return View(application);
    }

对于可选参数,我知道您会做类似Guid的事情吗?在参数中,但Visual Studio不喜欢这种方法,我也无法进行Guid application = null。有任何想法吗?

2 个答案:

答案 0 :(得分:4)

如前所述,将参数设为可选。

public ActionResult Roles(Guid? id) {
    if (id == null || id.Value == Guid.Empty) {
        return View();
    }

    var application = new ApplicationStore().ReadForId(id.Value);

    return View(application);
}

这也假定默认的基于约定的路由

"{controller}/{action}/{id}"

在路由模板中id是可选的。

id = UrlParameter.Optional

例如

routes.MapRoute(
     name: "SomeName",
     url: "{controller}/{action}/{id}",
     defaults: new { controller = "Account", action = "Index", id = UrlParameter.Optional }
 );

答案 1 :(得分:1)

您可以将Guid参数更改为字符串。 Guid.Empty = 00000000-0000-0000-0000-000000000000尝试传递空值时可能会导致问题。 如果您将其切换为类似的方式(但仍使用Guid):

public ActionResult Roles(string applicationId)
{
    if (string.IsNullOrEmpty(applicationId))
    {
        return View();
    }

    var application = new ApplicationStore().ReadForId(applicationId);

    return View(application);
}

它可以避开您遇到的错误。