ASP.NET MVC - 使用EditorFor

时间:2015-10-31 08:56:19

标签: c# asp.net-mvc razor ienumerable view-templates

我有一个MVC3页面,用于呈现包含表格的视图。该表有一个列,用于每月的每一天,共有7行,每行代表一个组织的一个部门。

在表格的每个单元格中,都有一个输入文本框,用户必须输入表示能源使用情况的数值。

类模型如下所示:

public class EnergySheet
{
    public DateTime Month { get; set; }
    public List<DepartmentValue> DepartmentValues { get; set; }
}

public class DepartmentValue
{
    public int DepartmentId { get; set; }
    public string DepartmentName { get; set; }
    public List<DayValue> DayValues { get; set; }
}

public class DayValue
{
    public DateTime Date { get; set; }
    public decimal EnergyUsage { get; set; }
}

视图的呈现方式如下:

EnergySheet.cshtml:

@model EnergySheet

@using(Html.BeginForm()){
    <table>
        <tbody>
            @Html.EditorFor(x => x.DepartmentValues)
        </tbody>
    </table>
    <input type="submit" value="Save" />
}

DepartmentValue.cshtml:

@model DepartmentValue
<tr>
    @Html.EditorFor(x => x.DayValue)
</tr>

DayValue.cshtml

@model DayValue
<td>
    @Html.EditorFor(x => x.EnergyUsage)
</td>

问题

这一切都很好,并且模型在发回服务器时绑定正确。但问题是性能 - 页面需要10-15秒来渲染包含大约200个输入字段的网格。

我已经确保我在发布模式下运行,并且Web.config有<compilation debug="false"> - 所以它不应该是没有缓存视图路径的问题。我正在使用功能强大的机器 - 四核i7,16GB等

尝试修复

我尝试通过明确指定视图模板名称来替换编辑器模板上的“自动迭代” - 即@Html.EditorFor(x => x.DepartmentValues)变为@Html.EditorFor(x => x.DepartmentValues, "DepartmentValues")@Html.EditorFor(x => x.DayValue)变为@Html.EditorFor(x => x.DayValue, "DayValue")。这也意味着手动迭代模板中的集合 - 如this post中所述。这解决了性能问题 - 页面立即呈现 - 但所有自动模型绑定都丢失了。

我的问题是 - 编辑器模板的自动渲染真的应该这么慢吗?或者我做错了什么?一个只有200个输入字段的页面肯定不应该对渲染引擎征税吗?

0 个答案:

没有答案