2014-11-08 72 views
0

我在我的MVC项目中有两个控制器,每个控制器都有一个Weapon动作/视图。两个视图都将其@model属性设置为具有取决于视图的不同属性的WeaponViewModel,例如,对于一个视图,ViewModel.Weapon = Axe和另一个视图ViewModel.Weapon = SwordAxeSword实现了一个IWeapon接口,所以具有相同的属性。相同视图的ASP.NET MVC部分视图

由于每个视图呈现相同的WeaponViewModel,我发现它具有相同的Razor两个视图的代码矫枉过正。我所做的就是创建一个在Shared文件夹命名为_Weapon这样查看:

@model WeaponViewModel 
//razor code goes here 

..和在这两种观点我现在只有有这样的代码:

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

结果的作品,但我问题是:使用Html.RenderPartial来渲染(基本上)完整视图是否正确?另外,如果我稍后决定变得更细化并在我的共享_Weapon视图中创建更多的部分视图,是否有任何需要注意的细节?

+1

你也可以用部分在查看使用EditorFor(M => M)/共享/ EditorTemplates – Tobias 2014-11-10 09:58:28

回答

1

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

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

而在武器控制你必须:

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

    public ActionResult Sword 
    { //...} 
} 
+0

喜YuriG,感谢您的设计建议,尽管它没有明确回答我的问题:“使用Html.RenderPartial来呈现(基本上)完整视图是否正确?” – globetrotter 2014-11-08 16:19:51

+0

@globetrotter,“拇指规则”将是 - no。您不应该使用局部视图来替换完整的视图。 但是,一般规则(特别是拇指规则)是打算被打破的。所以,如果你的具体情况需要局部视图而不是完整视图 - 去吧 (但是,请考虑一些重构以避免它:)) – YuriG 2014-11-08 16:31:07