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