相同视图的ASP.NET MVC部分视图

时间:2014-11-08 15:35:35

标签: c# asp.net asp.net-mvc asp.net-mvc-4 razor

我的MVC项目中有两个控制器,每个控制器都有一个Weapon操作/视图。两个视图都将@model属性设置为WeaponViewModel,具有不同的属性,具体取决于视图,例如对于一个视图,ViewModel.Weapon = Axe和另一个视图ViewModel.Weapon = SwordAxeSword实现IWeapon接口,因此具有相同的属性。

由于每个视图都呈现相同的WeaponViewModel,因此我发现两个视图具有相同的Razor代码是一种过度杀伤力。我所做的是在_Weapon文件夹中创建一个名为Shared的视图:

@model WeaponViewModel
//razor code goes here

..在两个视图中我现在只有这个代码:

@model WeaponViewModel
@{ Html.RenderPartial("_Weapon", Model); }

结果有效但我的问题是:使用Html.RenderPartial呈现(基本上)完整视图是否正确?此外,如果我后来决定变得更精细并在我的共享_Weapon视图中创建其他部分视图,是否有任何需要注意的问题?

1 个答案:

答案 0 :(得分:1)

如果不完全理解您的项目,听起来更像是设计方面而非技术问题 对于这种特定情况,您可能需要考虑从每个"武器"移动所有共享逻辑。到一个能够处理所有武器的控制器 该控制器将负责所有当前和未来武器的所有部分视图,
而主视图将根据武器类型调用相关的局部视图 类似的东西:

Html.RenderPartial("~/Views/Weapon/" + Model.Type, Model);

在武器控制器中你将拥有:

public class WeaponController : Controller
{
    public ActionResult Axe
    { //...}

    public ActionResult Sword
    { //...}
}