0

Umbraco をコンテンツ配信システムとしてさらに活用する方法を説明しているこの素晴らしいチュートリアルに従いました。チュートリアル MVC Umbraco => モデルとビューは、実際のフロントエンド開発者にとって大きな利点となる特定の Umbraco 実装に依存してはなりません。

CMS からデータにアクセスするために、Umbraco.Web.Mvc.RenderMvcController から継承されたコントローラー。今私の問題は、ナビゲーションに @HTML.actionlink を使用できないことです。これは SurfaceController でのみサポートされているようです。

ここで私の質問は、Umbraco.Web.Mvc.RenderMvcController 内でナビゲーションをどのように実装するかということです。ネイティブの @HTML.actionlink タグを引き続き使用できますか?

4

1 に答える 1

1

いいえ、できません。すべてのリクエストが単一のアクションを通過するためです。CMS が管理するページへのパスを取得するには、 が提供するノード/コンテンツ トラバーサルを使用する必要があり@Modelます。詳細については、こちらを参照してください。

編集

明確にするために、この記事の著者は、Umbraco の実装は、ビューにロジックがほとんどまたはまったくない従来の MVC 実装とより一致する必要があることを示唆しています。したがって、ノード データのクエリはビューの前に行う必要があります (例: マッパー)。したがって、ここでリンクを取得する必要があります。

Umbraco のデフォルトの MVC 実装では、すべてのリクエストが 1 つのコントローラーで 1 つのアクションを経由するように強制されます。作成者の実装では、ドキュメント タイプごとに 1 つのコントローラでリクエストを共有できます。これは IMO としては優れています。Html.ActionLinkただし、ページごとのアクションがないため、ビューでは冗長であることを意味します。

さらに編集

実装に関係なく、Umbraco が管理するページと非 Umbraco ページを組み合わせたナビゲーション リストを作成する場合は、次のようにします。

  1. NavigationControllerから継承する別個のナビゲーション用の子アクションとビューを作成します。SurfaceController
  2. this.CurrentPage継承のプロパティを使用してSurfaceController、Umbraco コンテンツ キャッシュを走査し、関連する Umbraco 管理ページを取得します。その後、各ページ結果のプロパティを使用しUrlてそのパスを取得し、Nameプロパティを使用してページ タイトルを取得できます。
  3. this.Url.Action("action", "controller")Umbraco 以外の特定のアクションへのパスを取得するために使用します。または、ページがデータベース管理されている場合は、この時点でデータ レイヤー (EF、NHibernate、PetaPoco など) を使用します。
  4. これらを辞書で組み合わせて必要なリストを作成します。Keyはパスで、Valueはページ タイトルです。
  5. これをビュー モデルとしてビューに渡します。

もちろん、キャッシュのように考慮すべきことは他にもたくさんありますが、一言で言えば、それはかなり基本的な実装です。

于 2013-08-19T12:30:26.607 に答える