Asp.net mvc ASP.NET MVC路线图

Asp.net mvc ASP.NET MVC路线图,asp.net-mvc,asp.net-mvc-routing,maproute,ignoreroute,Asp.net Mvc,Asp.net Mvc Routing,Maproute,Ignoreroute,请帮助我更正我的ASP.NET MVC路线图 我有一个带有ActionLink的菜单项: @Html.ActionLink(“文章”、“列表”、“文章”) 在主页上,它看起来像: localhost/Article这是可以的 但是在具体的文章页面上,URLlocalhost/Article/List/11my menu链接是相同的: localhost/Article/List/11 但是我需要localhost/Article 我的路线图代码如下: public static void Reg

请帮助我更正我的ASP.NET MVC路线图

我有一个带有ActionLink的菜单项:
  • @Html.ActionLink(“文章”、“列表”、“文章”)
  • 在主页上,它看起来像:
    localhost/Article
    这是可以的

    但是在具体的文章页面上,URL
    localhost/Article/List/11
    my menu链接是相同的:
    localhost/Article/List/11

    但是我需要
    localhost/Article

    我的路线图代码如下:

    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
    
        routes.MapRoute(
            name: "Article",
            url: "Article/{action}/{id}",
            defaults: new { controller = "Article", action = "List", id = UrlParameter.Optional }
        );
    
        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );
    }
    
    以下是控制器代码:

    public ActionResult List(int? id)
        {
            ArticlesDataManager artMgr = new ArticlesDataManager();
            ArticleViewModel art = new ArticleViewModel();
    
            art.Articles = artMgr.GetLastArticles();
    
            art.Article = (id == null) ? artMgr.GetLast() : artMgr.GetArticle((int)id);
    
            ViewData.Model = art;
    
            return View();
        }
    

    我猜您当前的查询字符串项目正在添加到您的操作链接中。要避免此问题,请使用重载并尝试显式地将
    null
    作为routeValue传递,并查看它带来的更改

    public static MvcHtmlString ActionLink(
        this HtmlHelper htmlHelper,
        string linkText,
        string actionName,
        string controllerName,
        RouteValueDictionary routeValues,
        IDictionary<string, Object> htmlAttributes
    )
    
    公共静态MvcHtmlString ActionLink(
    这个HtmlHelper HtmlHelper,
    字符串链接文本,
    字符串actionName,
    字符串控制器名称,
    RouteValueDictionary routeValues,
    辞典
    )
    
    因此,您的代码可以重新编写为

    <li>@Html.ActionLink("Articles", "List", "Article",
                                            new RouteValueDictionary { },null)</li>
    
  • @Html.ActionLink(“文章”、“列表”、“文章”, 新RouteValueDictionary{},空)
  • 你也可以试试这个版本

    <a href="Url.Action("List", "Articles")">Articles</a>
    

    通过更改路线图解决了我的问题:

    public static void RegisterRoutes(RouteCollection routes)
            {
                routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
    
                routes.MapRoute(
                   name: "ArticleByFirst",
                   url: "Article/{action}/",
                   defaults: new { controller = "Article", action = "List" }
               );
    
                routes.MapRoute(
                    name: "ArticleById",
                    url: "Article/List/{id}",
                    defaults: new { controller = "Article", action = "List", id = UrlParameter.Optional }
                );
    
                routes.MapRoute(
                    name: "Default",
                    url: "{controller}/{action}/{id}",
                    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
                );
            }
    
    我的菜单链接看起来像:
  • 我的项目链接是:

  • 这不好,我不能在ActionLink中选择路线图的名称。

    在这种情况下,菜单的url是/Home/List?Length=7@YuriyMayorov:对不起,超载是错误的。试试更新的。你能分享一个示例项目吗?在skydrive上?您需要url中的id吗?你能把它从地图上去掉吗。您还可以尝试将Shyju指示的RouteValueDictionary设置为new{id=null},而不仅仅是new{}。是的,我的url中需要id。article/list/id-显示文章列表和所选文章。文章/列表-按日期显示文章列表和最后一篇文章。我知道,我可以通过添加像“查看”这样的新操作来解决我的问题。Article/view/id。但我只想使用一个操作:)int是否是控制器操作(即int)中可为null的int?这可能与ActionLink()的新{id=null}结合使用也会产生影响method@dreza是的,我把我的控制器代码加到帖子里了