为什么同一个控制器的第二个route.MapRoute得到一个Null id

时间:2017-04-01 14:21:27

标签: asp.net-mvc-4 routing

我是ASP.NET MVC的初学者。

我有这些路线

www.site.com/Afficher/Livre/1

www.site.com/Afficher/Auteur/2

我用一个动作写了一个One控制器。总是路由中的第二个动作.MapRoute总是在id

中得到一个null

控制器文件:AfficherController

    public string Auteurs()
    {
        return "liste des auteurs";
    }

    public string Auteur(int? idAuteur)
    {
        return "liste des livres de l'auteur "+idAuteur+" sont :";
    }

    public string Livre(int idlivre)
    {
        return "details du livre " + idlivre + " est : ";
    }

路由文件

  routes.MapRoute(
     name: "afficherLivre",
     url: "{controller}/{action}/{idlivre}",
     defaults: new { controller = "Afficher", action = "Livre", id = UrlParameter.Optional }
 );

        routes.MapRoute(
           name: "AfficherAuteur",
           url: "{controller}/{action}/{idAuteur}",
           defaults: new { controller = "Afficher", action = "Auteur", id =  UrlParameter.Optional }
       );
 routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Afficher", action = "Auteurs", id = UrlParameter.Optional }
        );

1 个答案:

答案 0 :(得分:0)

如果要通过url传递参数,则其名称在ASP.NET代码的三个位置应相同:urldefaults参数MapRoute和也在行动参数。您更改了url和操作参数,但忘记将id替换为idAuteur参数中的defaults。如果您这样做,您的代码应该有效。

但更重要的是,看起来你正在为每个动作创建自己的MapRoute。你没有必要。只需将MapRoute保留为名称Default,并在操作idAuteur中将参数名称更改为Livre

祝你好运!