1

我一直在阅读大量博客,并试图确定从模式和实践到性能的最佳方法是什么。

选项 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 对我来说似乎是最好的,因为我的观点没有逻辑,但在我看来它也是一种反模式,因为它肯定会影响性能,因为我一直在阅读说孩子的博客行动影响绩效。

任何帮助表示赞赏。Ĵ

4

1 回答 1

2

在我看来,这取决于您需要相同输出的其他地方。

如果您要在站点的其他部分重复使用该模型的显示逻辑,那么有一个包含 if 语句/标记的局部视图是有意义的,然后@Html.Partial("SomeBooleanProperty", Model)在需要显示局部视图的任何地方调用。

例如,如果您只在一个页面上添加此逻辑,则只需在主视图中添加 if 语句/标记,因为无需将其分开。

我不会使用选项 3 来控制显示逻辑,因为它是视图逻辑,在视图中执行条件逻辑没有问题。

选项 3 将简化您的视图模型,这意味着您不必将所需的所有数据传递到父视图中,但是调用所需的控制器会产生性能开销。

于 2013-03-05T13:07:55.717 回答