Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.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 在ASP.NET MVC中定义路由_Asp.net Mvc_Routes - Fatal编程技术网

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”
使用此配置时,我从Home/Index开始,但/Customer/Detail/MyCode始终提供空值

如果我反转routes.MapRoute,我有:

  • 默认情况下,我转到/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,而是代码。。