2

我有一个 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; }
}

视图呈现如下:

能量表.cshtml:

@model EnergySheet

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

部门值.cshtml:

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

DayValue.cshtml

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

问题

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

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

尝试修复

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

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

4

0 回答 0