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
在我看来,这取决于您在其他地方需要相同的输出。
如果您打算在站点的其他部分重用该模型的显示逻辑,那么有一个包含If语句/标记的部分视图,然后在需要显示部分视图的地方调用@Html.Partial("SomeBooleanProperty", Model)
是有意义的。
例如,如果您只在一个页面上添加此逻辑,则只需在主视图中使用If语句/标记,因为没有必要将其分开。
我不会使用选项3来控制显示逻辑,因为它是视图逻辑,在视图中执行条件逻辑没有问题。
选项3将简化您的视图模型,这意味着您不必将所需的所有数据传递给父视图,但是调用所需的控制器会带来性能开销。