在Asp.Net MVC中将模型传递给嵌套PartialView的成本

时间:2016-09-10 08:36:44

标签: asp.net .net asp.net-mvc partial-views

我在Asp.net MVC中有一些嵌套的PatialView

pv1.cshtml

@model MyNameSpace.ClassDto
@{
    Layout = null;
}
@Html.Partial("pv2",Model)
@Html.Partial("pv3",Model.FormName)

pv2.cshtml

@model MyNameSpace.ClassDto
@{
    Layout = null;
}
<p>@Model.FormName</p>

pv3.cshtml

@model string
@{
    Layout = null;
}
<p>@Model</p>

现在问题是这些方式哪种更好,成本更低?

1 个答案:

答案 0 :(得分:1)

使用TextBox@Html.Partial("pv2",Model)之间的差异是可以忽略的。

当asp.net mvc为你提供一个页面时,该页面应该已经编译好了(取决于设置,asp.net mvc等等,你可以在启动时预编译所有视图或者在编译期间编译每个视图第一次打电话)。

编辑页面 pv1.cshtml 将显示以下代码(简化):

@Html.Partial("pv3",Model.FormName)

你可以看到对@Html.Partial的两次调用都为WebPage执行生成相同的代码,这将调用编译的视图public override void Execute() { Layout = null; BeginContext("~/Views/Test/pv1.cshtml", 79, 2, true); WriteLiteral("\r\n"); EndContext("~/Views/Test/pv1.cshtml", 79, 2, true); BeginContext("~/Views/Test/pv1.cshtml", 82, 26, false); Write(Html.Partial("pv2", Model)); EndContext("~/Views/Test/pv1.cshtml", 82, 26, false); BeginContext("~/Views/Test/pv1.cshtml", 108, 2, true); WriteLiteral("\r\n"); EndContext("~/Views/Test/pv1.cshtml", 108, 2, true); BeginContext("~/Views/Test/pv1.cshtml", 111, 35, false); Write(Html.Partial("pv3", Model.FormName)); EndContext("~/Views/Test/pv1.cshtml", 111, 35, false); } pv2代码来生成html,执行时间取决于大小观点。

大多数时候你不想考虑页面编译/执行的速度,因为它非常快。将慢速代码放到视图中会使视图执行变慢 - 在控制器中执行所有“慢”代码 - 永远不要将数据库访问,API调用和类似的东西放到.cshtml中,并且您的项目应该运行良好。