0

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

我有一个带有 ActionLink 的菜单项:
<li>@Html.ActionLink("Articles", "List", "Article")</li>

在主页上,它看起来像: localhost/Article 没关系。

但是在带有 URL 的具体文章页面上,localhost/Article/List/11我的菜单链接是相同的: 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();
    }
4

2 回答 2

1

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

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 }
            );
        }

我的菜单链接看起来像: <li><a href="@Url.RouteUrl("ArticleByFirst", new { action = "List" })">Articles</a></li>

我的项目链接是:<li><a href="@Url.RouteUrl("ArticleById", new { id = item.Id })">@item.Name</a></li>

不好,我不能在 ActionLink 中选择 Route Map 的名称。

于 2013-03-24T20:49:44.237 回答
0

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

public static MvcHtmlString ActionLink(
    this HtmlHelper htmlHelper,
    string linkText,
    string actionName,
    string controllerName,
    RouteValueDictionary routeValues,
    IDictionary<string, Object> htmlAttributes
)

所以你的代码可以重写为

<li>@Html.ActionLink("Articles", "List", "Article",
                                        new RouteValueDictionary { },null)</li>

你也可以试试这个版本

<a href="Url.Action("List", "Articles")">Articles</a>
于 2013-03-22T18:04:58.953 回答