听起来您拥有的 Restaurant 模型是域模型的一部分,并且您正在视图中使用它。如果是这样,那么您应该考虑使用视图模型,其中每个模型都特定于您正在创建的视图。视图模型的内容可以根据需要映射到域模型或从域模型映射,以防止您在实现产品编辑和类别编辑视图时遇到您提到的字段不匹配。可以手动执行此映射(即逐个字段复制),也可以使用 automapper 等工具为您执行此映射。
编辑:
据我了解,如果您访问网站的餐厅部分,您会有一个侧边导航,其中的链接始终相同,但需要为该餐厅动态生成。
布局是否_Restaurant
包含与 main 中定义的元素相似的元素_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-->
希望这会有所帮助。