我一直在阅读众多博客,并试图确定从模式和实践到绩效的最佳方法。
选项1 我有一个部分视图Index.cshtml与以下..
@if (Model.SomeBooleanProperty)
{
<div>A chunk of HTML</div>
}
选项2 我有一个部分视图Index.cshtml与以下..
@Html.Partial("SomeBooleanProperty", Model)
并且该局部视图具有布尔逻辑。
@if (Model.SomeBooleanProperty)
{
<div>A chunk of HTML</div>
}
选项3 我有一个部分视图Index.cshtml与以下..
@Html.Action("AControllerMethod", "Controller", Model)
和AControllerMethod如下
[ChildActionOnly]
[AcceptVerbs(HttpVerbs.Post | HttpVerbs.Get)]
public ActionResult AControllerMethod(SomeModel model)
{
if (model.SomeBooleanProperty)
{
return View(model);
}
else
{
return new ContentResult() { Content = String.Empty };
//return null
}
}
然后返回的部分将如下(无条件逻辑)
<div>A chunk of HTML</div>
从备受关注的角度看,选项3对我来说似乎是最好的,因为我在视图中没有逻辑,但是在我看来它也是一种反模式,因为它肯定会影响性能,因为我一直在阅读博客说儿童行为影响表现。
感谢任何帮助。 Ĵ
答案 0 :(得分:2)
在我看来,这取决于你需要相同输出的其他地方。
如果您要在网站的其他部分重新使用该模型的显示逻辑,那么有一个包含if语句/标记的部分视图是有意义的,然后在任何地方调用@Html.Partial("SomeBooleanProperty", Model)
需要显示局部视图。
例如,如果您只在一个页面上添加此逻辑,则只需在主视图中使用if语句/标记,因为不需要将其分开。
我不会使用选项3来控制显示逻辑,因为视图逻辑在视图中执行条件逻辑没有问题。
选项3将简化您的视图模型,这意味着您不必将所有必需的数据传递到父视图中,但是会有一个性能开销调用所需的控制器。