我的MVC
项目中有两个控制器,每个控制器都有一个Weapon
操作/视图。两个视图都将@model
属性设置为WeaponViewModel
,具有不同的属性,具体取决于视图,例如对于一个视图,ViewModel.Weapon = Axe
和另一个视图ViewModel.Weapon = Sword
。 Axe
和Sword
实现IWeapon
接口,因此具有相同的属性。
由于每个视图都呈现相同的WeaponViewModel
,因此我发现两个视图具有相同的Razor
代码是一种过度杀伤力。我所做的是在_Weapon
文件夹中创建一个名为Shared
的视图:
@model WeaponViewModel
//razor code goes here
..在两个视图中我现在只有这个代码:
@model WeaponViewModel
@{ Html.RenderPartial("_Weapon", Model); }
结果有效但我的问题是:使用Html.RenderPartial
呈现(基本上)完整视图是否正确?此外,如果我后来决定变得更精细并在我的共享_Weapon
视图中创建其他部分视图,是否有任何需要注意的问题?
答案 0 :(得分:1)
如果不完全理解您的项目,听起来更像是设计方面而非技术问题
对于这种特定情况,您可能需要考虑从每个"武器"移动所有共享逻辑。到一个能够处理所有武器的控制器
该控制器将负责所有当前和未来武器的所有部分视图,
而主视图将根据武器类型调用相关的局部视图
类似的东西:
Html.RenderPartial("~/Views/Weapon/" + Model.Type, Model);
在武器控制器中你将拥有:
public class WeaponController : Controller
{
public ActionResult Axe
{ //...}
public ActionResult Sword
{ //...}
}