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

本文关键字:视图 MVC ASP NET | 更新日期: 2023-09-27 18:29:37

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

由于每个视图呈现相同的WeaponViewModel,我发现两个视图使用相同的Razor代码是矫枉过正的。我所做的是在Shared文件夹中创建一个名为_Weapon的视图,如下所示:

@model WeaponViewModel
//razor code goes here

..在两个视图中,我现在只有以下代码:

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

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

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

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

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

在武器控制器中,您将拥有:

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