0

MVC3でレストランエンティティの編集を整理するための最良の方法をアドバイスしてください。

サイトのすべてのページに共通のヘッダーとフッターを持つ_Layoutページがすでにあります。_Layoutには、名前として「Content」を含むセクションがあります。

レストランの編集用に、_Restaurantという別のレイアウトを作成しました。これは、基本情報、写真、カテゴリなどを編集するオプションを備えたサイドナビゲーションを追加します。すべてのナビゲーションリンクは、@ Html.ActionLink( "Some name"、 "Edit" 、"Restaurant"、new {id = Model.ID})、すべてのリンクは同じコントローラー名とルーティング値を持っています。このレイアウトのモデルはレストランです(ナビゲーション用の適切なリンクを作成する必要があります)

現時点では、編集用ビューと写真用ビューを実装しましたが、どちらのビューもレストランをモデルとして使用しているため、この構造は非常にうまく機能します。ただし、このページでは異なるモデルが必要になるため、レストランの商品やカテゴリの編集を実装しようとすると、問題が発生する可能性があります。

この状況であなたは何をアドバイスしますか?部分ビューを使用してサブナビゲーションを生成できることは知っていますが、この場合、生成するすべてのビューにレンダリングコードを挿入する必要があるため、これは最善の解決策ではないと思います。

4

1 に答える 1

1

お持ちのレストランモデルはドメインモデルの一部であり、ビューで使用しているようです。その場合は、各モデルが作成するビューに固有であるビューモデルの使用を検討する必要があります。ビューモデルのコンテンツは、必要に応じてドメインモデルにマッピングしたり、ドメインモデルからマッピングしたりして、製品編集ビューとカテゴリ編集ビューの実装で言及したフィールドの不一致を防ぐことができます。このマッピングは手動で実行することも(つまり、フィールドごとにコピーすることも)、automapperなどのツールを使用してこのマッピングを実行することもできます。

編集:

私の理解では、サイトのレストラン部分にアクセスすると、リンクは常に同じですが、そのレストランに対して動的に生成する必要があるサイドナビゲーションがあります。

_Restaurantレイアウトには、メインで定義されているものと同様の要素が含まれてい_Layoutますか?もしそうなら、私は_Restaurantレイアウトをネストされたレイアウトにします(まだそうでない場合)ので、それらの要素を再定義する必要はありません。

例えば:

メイン_Layoutは次のように定義されます。

<html>
...
<body>
    <!--main navigation here-->
    @RenderBody()
<body>
</html>

次に、ネストされた_Restaurantレイアウトを定義できます。

@{
    Layout = "_Layout.cshtml"
}
<!-- Define elements for the restaurant layout here-->
@RenderBody()

このレイアウトでレストランの要素を定義できますが、ビューモデルを生成する必要があるため、ここでサイドナビゲーションを定義することはできません。したがって、ネストされたレイアウトに表示されるのがサイドナビゲーションだけである場合、ネストされたレイアウトを使用することすらありません。それ以外の場合(他の要素がネストされたレイアウトで定義されている場合)、ネストされたレイアウトでセクション(@RenderSection)を定義して、それを使用するすべてのビューがサイドナビゲーションを定義するようにすることができます。

次に、各ビューは次のように定義されます(子アクションを使用してサイドナビゲーションをレンダリングします)。

@model ...

@{
    Layout = "~/_Restaurant.cshtml"
}

@Html.RenderAction("SideNavigation", "RestaurantController", new { id = Model.Id })

その場合、子アクションは次のように定義されます。

public class RestaurantController : Controller
{
    [ChildActionOnly]
    public PartialViewResult SideNavigation(int id)
    {
        return PartialView();
    }
}

これにより、IDが部分ビューに渡されます。部分ビューは次のように定義されます。

@model int

<!--code to display the side navigation-->

うまくいけば、これが役立つはずです。

于 2012-05-20T16:06:56.660 に答える