3

私はこれが以前に尋ねられたことを知っていますが、MVCのルート構成の概念に本当に苦労しています-特にURLからコントローラー名やアクション名を削除します。

私のWebページには、独自のコントローラー(SidebarController)を使用する「Sidebar」という部分ビューがあります。

サイドバーの部分ビュー内に、次のActionLinkがあります。

@Html.ActionLink("December-2012", "Archive", new { id = "December-2012" })

リンクが作成されると、URLは次のようになります。

http://localhost/Sidebar/Archive/December-2012

私の問題は、URLに「サイドバー」の部分が表示されることです。このコントローラーは、技術的にはナビゲーションに使用されていません。部分ビューを作成するために使用されます。代わりに、URLに次のように読み上げてください。

http://localhost/Archive/December-2012

ActionLinkでコントローラーを指定しようとしましたが、結果として

http://localhost/Archive/Archive/December-2012

/ ArchiveがURLの最後に配置されたときに、Index(id)アクションを使用してArchiveControllerを呼び出すことができるように、ルートを構成する方法を(簡単に)説明してもらえますか?

事前に感謝し、以前に取り上げられた質問をしてくれたことをお詫びします-私が言ったように、私はルートマップの概念全体に本当に苦労しています。

4

2 に答える 2

2

Not entire sure what your doing wrong here. Perhaps also include the code for the second url.

You could use this overload of the Html.ActionLink method:

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

You would use it like this:

@Html.ActionLink("December-2012(ThisIsLinkText)", "Index", "Archive", 
                 new { id = "December-2012"}, null);

Which will produce the following url:

http://localhost/Archive/Index/December-2012

Update:

Based on your comment you need this route above your default route:

routes.MapRoute(
    "ArchiveRoute", 
    "Archive/{id}", 
    new { controller = "Archive", action = "Index", id = UrlParameter.Optional } 
);

And the same action link should map to this url:

@Html.ActionLink("December-2012(ThisIsLinkText)", "Index", "Archive", 
                 new { id = "December-2012"}, null);

Remember the route has to be above the Default route.

This url should then work:

http://localhost/Archive/December-2012
于 2012-11-29T02:29:25.200 に答える
0

編集、インデックスの空のアクションを試してください:

@Html.ActionLink("December-2012", "", "Archive", new { id = "December-2012" }, null)

/Archive が URL の末尾に配置されたときに、ArchiveController を (たとえば) Index(id) アクションで呼び出すことを認識できるように、ルートを構成する方法を (簡単な言葉で) 説明してもらえますか?

デフォルトルートはこれを行う必要があります。これはデフォルト ルートです。

routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
            );

ここで何が起こるかというと、URL を入力するだけでhttp://localhost/そのルートが実行され、コントローラー/アクションが指定されていないことに気付くため、デフォルトの "Home" に移動し、デフォルトのアクションである "Index" を実行します。

(またはmvc3 を使用している場合Archive) のデフォルト ルートの上に (例として) ルートを追加できます。RouteConfigGlobal.asax

routes.MapRoute(
                name: "ArchiveRoute",
                url: "archive/{id}",
                defaults: new { controller = "Archive", action = "Index", id = UrlParameter.Optional }
            );

これは、URLが次のように始まるたびに起動しますhttp://localhost/archive

それがより明確になることを願っています。

于 2012-11-29T02:34:04.280 に答える