MVC -视图逻辑,子操作,部分视图或单独的部分的正确位置

本文关键字:视图 单独 位置 操作 MVC | 更新日期: 2023-09-27 18:02:33

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

选项1 我有一个局部视图索引。

@if (Model.SomeBooleanProperty)
{
     <div>A chunk of HTML</div>
}

选项2 我有一个局部视图索引。

@Html.Partial("SomeBooleanProperty", Model)

,该部分视图具有布尔逻辑。

@if (Model.SomeBooleanProperty)
{
     <div>A chunk of HTML</div>
}

选项3 我有一个局部视图索引。

@Html.Action("AControllerMethod", "Controller", Model)

和如下的acontrolermethod

[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似乎是最好的,因为我在视图中没有逻辑,但在我看来,它也似乎是一个反模式,因为它肯定会影响性能,因为我一直在阅读说子操作影响性能的博客。

任何帮助都是感激的。J

MVC -视图逻辑,子操作,部分视图或单独的部分的正确位置

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

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

例如,如果您只在一个页面上添加此逻辑,则只需在主视图中使用If语句/标记,因为没有必要将其分开。

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

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