Asp.net mvc 在ASP.NET MVC中定义路由
我定义了一条新路线(见下文)。启动应用程序时,默认情况下我希望:Asp.net mvc 在ASP.NET MVC中定义路由,asp.net-mvc,routes,Asp.net Mvc,Routes,我定义了一条新路线(见下文)。启动应用程序时,默认情况下我希望: 回家/索引 如果我转到/Customer/Detail/MyCode,则获取“MyCode” 使用此配置时,我从Home/Index开始,但/Customer/Detail/MyCode始终提供空值 如果我反转routes.MapRoute,我有: 默认情况下,我转到/Customer/Detail,并始终获得mycode值(无空anymoe) 我不从/Home/Index开始 有什么想法吗 routes.MapRoute
- 回家/索引
- 如果我转到/Customer/Detail/MyCode,则获取“MyCode”
- 默认情况下,我转到/Customer/Detail,并始终获得mycode值(无空anymoe)
- 我不从/Home/Index开始
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
routes.MapRoute(
"CustomerDetail",
"{controller}/{action}/{code}",
new { controller = "Customer", action = "Detail", code = UrlParameter.Optional }
);
一条路线就足够了:
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{code}", // URL with parameters
new { controller = "Home", action = "Index", code = UrlParameter.Optional } // Parameter defaults
);
当您请求Home/Index
时,这将调用HomeController
上的Index
操作,并将null作为code
参数传递,当您请求Customer/Detail/MyCode
时,将在CustomerController
上调用Detail
操作并传递code=MyCode>
获取null的原因是,两个路由都是等效的,这意味着它们的形式为Controller/Action/SomeCode
,这意味着对于两个URL,第一个路由都是匹配的,但是参数名为id
,而不是code
,因此您将获得code=null
。另一种可能是简单地保留默认路线:
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
然后将参数重命名为Detail
操作为id:
public ActionResut Detail(string id)
{
// if you request Customer/Detail/MyCode the id parameter will equal MyCode
}
一条路线就足够了:
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{code}", // URL with parameters
new { controller = "Home", action = "Index", code = UrlParameter.Optional } // Parameter defaults
);
当您请求Home/Index
时,这将调用HomeController
上的Index
操作,并将null作为code
参数传递,当您请求Customer/Detail/MyCode
时,将在CustomerController
上调用Detail
操作并传递code=MyCode>
获取null的原因是,两个路由都是等效的,这意味着它们的形式为Controller/Action/SomeCode
,这意味着对于两个URL,第一个路由都是匹配的,但是参数名为id
,而不是code
,因此您将获得code=null
。另一种可能是简单地保留默认路线:
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
然后将参数重命名为Detail
操作为id:
public ActionResut Detail(string id)
{
// if you request Customer/Detail/MyCode the id parameter will equal MyCode
}
主页/索引将不会收到一个值,这意味着我将转到/Customer/Detail/MyCode。。。我不想那样。我启动应用程序,我必须呆在家里索引。稍后,我将有一些类似于/Product/Detail/MyCode的内容保持id不相关,它不是id而是代码。Home/Index不会收到值,这意味着我将转到/Customer/Detail/MyCode。。。我不想那样。我启动应用程序,我必须呆在家里索引。稍后,我会有类似于/Product/Detail/MyCode的内容,保持id不相关,它不是id,而是代码。。