Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.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
C# Global.asax中的RegisterRoutes_C#_Asp.net_Asp.net Mvc_Asp.net Mvc 3 - Fatal编程技术网

C# Global.asax中的RegisterRoutes

C# Global.asax中的RegisterRoutes,c#,asp.net,asp.net-mvc,asp.net-mvc-3,C#,Asp.net,Asp.net Mvc,Asp.net Mvc 3,我不能完全理解注册表的内容。假设浏览器的当前URL为 //Home/ListCompanies/{filter} http://localhost:21047/Home/ListProducers/Yerli 我们通过下面的链接找到了上面的地址 @Html.ActionLink("Yerli Markalar", "ListProducers/Yerli", "Home") 我在当前页面上有一个链接,如下所示 @Html.ActionLink("Bayiler", "ListCompanie

我不能完全理解注册表的内容。假设浏览器的当前URL为

//Home/ListCompanies/{filter}
http://localhost:21047/Home/ListProducers/Yerli
我们通过下面的链接找到了上面的地址

@Html.ActionLink("Yerli Markalar", "ListProducers/Yerli", "Home")
我在当前页面上有一个链接,如下所示

@Html.ActionLink("Bayiler", "ListCompanies", "Home")
http://localhost:21047/Home/ListCompanies/Yerli
但当我停留在最后一个链接上时,它也会显示“Yerli”过滤器,我在链接中没有给出它

为什么过滤器“耶利”会出现在这里?它应该像下面这样

http://localhost:21047/Home/ListCompanies/
我做错了什么

这是我的路线

routes.MapRoute(
            null,
            "Home/ListProducers/{filter}", // Route name
            new { controller = "Home", action = "ListProducers", filter = UrlParameter.Optional } // Parameter defaults
        );


 routes.MapRoute(
            null,
            "Home/ListCompanies/{filter}", // Route name
            new { controller = "Home", action = "ListCompanies", filter = UrlParameter.Optional } // Parameter defaults
        );

首先,您不使用

@Html.ActionLink("Yerli Markalar", "ListProducers/Yerli", "Home")
如果“Yerli”是要传递给的参数

public ActionResult ListProducers(string filter)
那就需要

@Html.ActionLink("Yerli Markalar", "ListProducers", "Home", new { filter = "Yerli" }, null)
这将生成
…/Home/ListCompanies/Yerli

您的问题是,您已经将
操作
参数生成为
ListCompanies/Yerli
,而它应该是
ListCompanies

注意,您还应该命名您的路线

routes.MapRoute(
  "ListProducers", // name it!
  "Home/ListProducers/{filter}", // Route name
   new { controller = "Home", action = "ListProducers", filter = UrlParameter.Optional } // Parameter defaults
);
但是,这些路由似乎不必要,您可以删除它们,让默认路由处理它

routes.MapRoute(
  name: "Default",
  url: "{controller}/{action}/{id}",
  defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
只需将方法更改为

public ActionResult ListProducers(string id)
和使用

@Html.ActionLink("Yerli Markalar", "ListProducers", "Home", new { id = "Yerli" }, null)

哪个会产生完全相同的结果

您可以发布实际路线吗?哪个路线?我不明白你的路线是如何在代码中定义的?我添加了路线@VsevolodGoloviznin。正如你所说,当我替换ActionLink和MapRoutes时,我单击了它指向“”的链接。为什么它的行为是这样的?我不得不像这样使用它“@Html.ActionLink(“Yerli Markalar”,“ListProducers”,“Home”,new{filter=“Yerli”},null)”是的,这是正确的(稍后会更新),重载也需要传递Html属性(最后一个参数)