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