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 に答える