いいえ、できません。すべてのリクエストが単一のアクションを通過するためです。CMS が管理するページへのパスを取得するには、 が提供するノード/コンテンツ トラバーサルを使用する必要があり@Model
ます。詳細については、こちらを参照してください。
編集
明確にするために、この記事の著者は、Umbraco の実装は、ビューにロジックがほとんどまたはまったくない従来の MVC 実装とより一致する必要があることを示唆しています。したがって、ノード データのクエリはビューの前に行う必要があります (例: マッパー)。したがって、ここでリンクを取得する必要があります。
Umbraco のデフォルトの MVC 実装では、すべてのリクエストが 1 つのコントローラーで 1 つのアクションを経由するように強制されます。作成者の実装では、ドキュメント タイプごとに 1 つのコントローラでリクエストを共有できます。これは IMO としては優れています。Html.ActionLink
ただし、ページごとのアクションがないため、ビューでは冗長であることを意味します。
さらに編集
実装に関係なく、Umbraco が管理するページと非 Umbraco ページを組み合わせたナビゲーション リストを作成する場合は、次のようにします。
NavigationController
から継承する別個のナビゲーション用の子アクションとビューを作成します。SurfaceController
this.CurrentPage
継承のプロパティを使用してSurfaceController
、Umbraco コンテンツ キャッシュを走査し、関連する Umbraco 管理ページを取得します。その後、各ページ結果のプロパティを使用しUrl
てそのパスを取得し、Name
プロパティを使用してページ タイトルを取得できます。
this.Url.Action("action", "controller")
Umbraco 以外の特定のアクションへのパスを取得するために使用します。または、ページがデータベース管理されている場合は、この時点でデータ レイヤー (EF、NHibernate、PetaPoco など) を使用します。
- これらを辞書で組み合わせて必要なリストを作成します。
Key
はパスで、Value
はページ タイトルです。
- これをビュー モデルとしてビューに渡します。
もちろん、キャッシュのように考慮すべきことは他にもたくさんありますが、一言で言えば、それはかなり基本的な実装です。