0

RazorViewEngineでMVC3を使用しています。Hrefに特定のルートを使用したい

以下はルート登録です(ブラウザを使用して直接使用できるため、ルートは機能しているようです)

routes.MapRoute(
    "AddItem",
    "{listAreaName}/{listSlug}/Add",
    new { controller = "List", action = "AddItem" }
    );

しかし、@Html.RouteLinkは機能しません。リンクに対して空のhrefを返します

これが私の試みのいくつかです

@Html.RouteLink("Add New Item", "AddItem", new { controller="List", action="AddItem", listAreaName = Model.ListAreaName, listSlug = Model.Slug })<br />
@Html.RouteLink("Add New Item1", "AddItem", new { controller = "List", listAreaName = Model.ListAreaName, listSlug = Model.Slug })<br />
@Html.RouteLink("Add New Item2", "AddItem", new { action = "AddItem", listAreaName = Model.ListAreaName, listSlug = Model.Slug })<br />
@Html.RouteLink("Add New Item3", "AddItem", new { controller = "list", action = "additem", listAreaName = Model.ListAreaName, listSlug = Model.Slug })<br />
@Html.RouteLink("Add New Item4", "additem", new { controller = "List", action = "AddItem", listAreaName = Model.ListAreaName, listSlug = Model.Slug })<br />

@Html.RouteLink("Add New Item5", "additem", new { listAreaName = Model.ListAreaName, listSlug = Model.Slug })<br />
@Html.RouteLink("Add New Item6", "AddItem", new { controller = "ListController", action = "AddItem", listAreaName = Model.ListAreaName, listSlug = Model.Slug })<br />

ルート名を見逃すと、有効なリンクが生成されますが、正しい形式ではありません

私が見つけた資料のほとんどは、v1のプレビューリリース用でした。この問題は分類されていますか?

何か案は?

4

2 に答える 2

2

最後のルート リンクでは間違いがあります。Controllerサフィックスを使用しないでください。

@Html.RouteLink(
    "Add New Item6", 
    "AddItem", 
    new { 
        controller = "List", 
        action = "AddItem", 
        listAreaName = Model.ListAreaName, 
        listSlug = Model.Slug 
    }
)

他の人に関する限り、彼らはすべて次の URL を生成します: /ListAreaName/Slug/AddASP.NET MVC 3 RTM では、デフォルトのルートが設定されており、質問に示されているルートが追加されていると仮定します。

于 2011-07-02T16:11:16.857 に答える
1

編集

デフォルトを省略できるのは、ルート内の 1 つの要素のみです。listAreaName または listSlug のデフォルトはありません。この質問を参照してください: 2 つのオプション パラメータを使用した asp mvc ルーティング

routes.MapRoute(
    "AddItem",
    "{listAreaName}/{listSlug}/Add",
    new
    {
        controller = "List",
        action = "AddItem",
        listAreaName = "foo", // <-- add these
        listSlug = UrlParameter.Optional
    });

オリジナル

ルートには、実際にはコントローラーとアクションのパラメーターは含まれていません。ルート値からそれらを省略しようとしましたか (ルートがリクエストでデコードされるときに推測されます)。ListAreaNameもう 1 つは、モデルにとの値が実際に含まれていることを確認することSlugです。

@Html.RouteLink("Add New Item",
                "AddItem",
                new
                {
                     listAreaName = Model.ListAreaName,
                     listSlug = Model.Slug 
                })<br />

<br/>また、可能であれば、CSS を使用してこれらをブロック レベルの要素としてスタイル設定する必要があります。

<style>
   .block { display: block; }
</style>

@Html.RouteLink("Add New Item",
                "AddItem",
                new
                {
                     listAreaName = Model.ListAreaName,
                     listSlug = Model.Slug 
                },
                new { @class = "block" })
于 2011-07-02T16:10:43.277 に答える