Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc MVC3中有两个可选参数的路由不工作_Asp.net Mvc_Asp.net Mvc 3_Asp.net Mvc Routing_Url Routing - Fatal编程技术网

Asp.net mvc MVC3中有两个可选参数的路由不工作

Asp.net mvc MVC3中有两个可选参数的路由不工作,asp.net-mvc,asp.net-mvc-3,asp.net-mvc-routing,url-routing,Asp.net Mvc,Asp.net Mvc 3,Asp.net Mvc Routing,Url Routing,我的应用程序中使用了以下类型的url localhost/admin/userdetail/id localhost/admin/userdetail/id/true localhost/admin/userdetail/id/true/success 这是我的管理员控制器 bool inSaveAction,字符串状态是可选的 下面的案例不起作用 在Global.asax中 routes.MapRoute("UserDetail", "UserDetail/{id}"

我的应用程序中使用了以下类型的url

localhost/admin/userdetail/id

localhost/admin/userdetail/id/true

localhost/admin/userdetail/id/true/success

这是我的管理员控制器

bool inSaveAction,字符串状态是可选的

下面的案例不起作用

在Global.asax中

 routes.MapRoute("UserDetail",
            "UserDetail/{id}",
            new
            {
                controller = "Admin",
                action = "UserDetail",
                id = UrlParameter.Optional
            }
         );
我跟着


如何使inSaveAction&status成为我的UserDetail操作的可选参数?

您缺少路由配置中的参数。为了使这项工作具有不同的可选参数(如Phil Haack的文章),您需要定义多个路由

routes.MapRoute("UserDetail-WithStatus", 
                "UserDetail/{id}/{inSaveAction}/{status}", 
                 new
                 {
                     controller = "Admin",
                     action = "UserDetail",
                     // nothing optional 
                 }
);

routes.MapRoute("UserDetail-WithoutStatus", 
                "UserDetail/{id}/{inSaveAction}", 
                 new
                 {
                     controller = "Admin",
                     action = "UserDetail",
                     // nothing optional 
                 }
);

routes.MapRoute("UserDetail-WithoutSaveAction", 
                "UserDetail/{id}", 
                 new
                 {
                     controller = "Admin",
                     action = "UserDetail",
                     id = UrlParameter.Optional
                 }
);
然后使用以下内容创建链接:

@Html.ActionLink("Link", "Index", "Admin", new { id = 1, inSaveAction = true, success = "success" }, null)
您还需要将可选参数设置为nullable,否则,如果缺少id或inSaveAction,将出现异常

public ActionResult UserDetail(int? id, bool? inSaveAction, string status)
{

}

我试过你给的密码。这也不起作用。它没有采取行动的方法。路由或操作方法参数有问题吗?我刚刚发布了一个编辑,您需要使id和inSaveAction为空。但什么不起作用?我测试了这个,所有的路线都正常。谢谢。状态也是可选的。对不起,你是什么意思?你能确认这些路线有效吗?在UserDetail操作中设置断点,然后尝试URL/Admin/UserDetail/1、/Admin/UserDetail/1/true、/Admin/UserDetail/1/true/success。设置了相应的参数后,所有这些都应该可以工作。在所有情况下,我都必须传递Id。那么,我们可以删除最后一个路由选项参数吗?
@Html.ActionLink("Link", "Index", "Admin", new { id = 1, inSaveAction = true, success = "success" }, null)
public ActionResult UserDetail(int? id, bool? inSaveAction, string status)
{

}