【问题标题】:ASP.NET MVC3 route for static .cshtml files静态 .cshtml 文件的 ASP.NET MVC3 路由
【发布时间】:2023-05-02 18:03:05
【问题描述】:

我正在添加一些带有一些内容的 .cshtml 文件(没有动态加载,只是静态内容)

有几个文件: /Views 是一个目录 /Dealership 是 /Views 中的一个目录

Views - Dealership - About.cshtml
Views - Dealership - Testimonials.cshtml
Views - Dealership - Audi.cshtml
Views - Dealership - AudiA6.cshtml
Views - Dealership - AudiA8.cshtml
Views - Dealership - BMW.cshtml
Views - Dealership - BMW5.cshtml
Views - Dealership - BMW7.cshtml

网址应该是:

www.mywebsite.com/dealership/about
www.mywebsite.com/dealership/testimonials
www.mywebsite.com/dealership/audi
www.mywebsite.com/dealership/audi/audi-A6
www.mywebsite.com/dealership/audi/audi-A8
www.mywebsite.com/dealership/bmw
www.mywebsite.com/dealership/bmw/bmw-5

路线应该是什么样子?我有这个:

    routes.MapRoute(
        "Dealership", // Route name
        "dealership/{action}/{id}", // URL with parameters
        new { controller = "Dealership", action = "Index", id = string.Empty }); // Parameter defaults

它适用于

www.mywebsite.com/dealership/audi

www.mywebsite.com/dealership/testimonials

但我不知道如何为

创建路线

www.mywebsite.com/dealership/audi/audi-A6

我希望它不会太混乱;-)

【问题讨论】:

    标签: asp.net-mvc asp.net-mvc-3 routing routes


    【解决方案1】:

    通常静态内容应该放在 Content 目录中,但我明白你为什么不想这样做。我会考虑为特定车辆使用部分视图,然后在基础视图中为该制造商使用逻辑来确定是显示通用代码还是显示基于模型的特定视图的部分代码。在您的控制器中,为汽车模型添加另一个参数(注意,我已将 id 重命名为 make)。

    路线

    routes.MapRoute(
            "Dealership", // Route name
            "dealership/{action}/{make}/{model}", // URL with parameters
            new { controller = "Dealership", action = "Index", make = string.Empty , model = UrlParameter.Optional }); // Parameter defaults
    

    控制器

    public ActionResult Index( string make, string model )
    {
         return( make, model );
    }
    

    视图 (audi.cshtml)

     @model string
     @if (string.IsNullOrEmpty(model)) {
        .. manufacturer html...
     }
     else
     {
        @Html.Partial( "audi-" + Model );
     }
    

    然后让您的视图文件夹的结构类似于

     dealership/audi.cshtml
     dealership/audi-audi-a6.cshtml
     ...
    

    【讨论】:

      【解决方案2】:

      它不起作用,因为框架搜索名称为“audi-A6”的视图,但它不存在。它的名字是“audiA6”。 尝试更改“audi-A6.cshtml”中的视图名称。

      希望对你有帮助

      【讨论】:

      • 不是这样的,现在框架认为audi-a6是个参数,路由对views一无所知,它只知道哪个controller,action,route参数是什么,别的什么都不知道, Action 知道向用户呈现哪个视图。
      • 问题是 www.mywebsite.com/dealership/audi 路线总是赢,即使我使用 www.mywebsite.com/dealership/audi/audiA6
      • @Joakim 真的,我没见过奥迪/Audi-A6,抱歉