我有一个表格,动态生成很多复选框(700+)。 IE中的表单加载非常缓慢(但几乎没有加载铬),当我发布表单时,它几乎锁定了我的Web浏览器。MVC性能问题与许多领域
我该如何调试这个问题,或者我是否做了导致此性能问题的错误?或者这是一个巨大的形式,我应该尝试分裂它。
这里是我的控制器:
public ActionResult Create(int id)
{
var model = new TaskRequestViewModel
{
Task = new Task(),
Components = db.Component.ToList()
….
}
return View(model);
}
要简单介绍一下我的模型,我有大约10个组件,每个组件都有约10子组件,每个子组件具有约10个选项(复选框)提供。导致所述700多个字段(然后是几个隐藏字段)。当有更少的复选框(100ish)时,它工作正常。
我的看法是这样的(3个嵌套循环):
@for (int cI = 0; cI < Model.Components.Count; cI++)
{
@Html.HiddenFor(x => Model.Components[cI].ComponentId)
@for (int scI = 0; scI < Model.Components[cI].SubComponents.Count; scI++)
{
@Html.DisplayFor(x => Model.Components[cI].SubComponents[scI].Name)
@Html.HiddenFor(x => Model.Components[cI].SubComponents[scI].SubComponentId)
@for (int t = 0; t < Model.Components[cI].SubComponents[scI].TaskTypes.Count; t++)
{
@Html.HiddenFor(x => Model.Components[cI].SubComponents[scI].TaskTypes[t].SubComponentTaskTypeId)
@Html.HiddenFor(x => Model.Components[cI].SubComponents[scI].TaskTypes[t].TaskTypeId)
@Html.CheckBoxFor(x => Model.Components[cI].SubComponents[scI].TaskTypes[t].Active)
}
}
}
您是否正在使用某种客户端技术(如javascript/jQuery)来修饰或以其他方式控制输入? – OzrenTkalcecKrznaric
还有没有办法减少这个数量或将其分成多个页面?或者像@OzrenTkalčecKrznarić所说的那样,尽可能地减少客户端的负担。 – Leniency
@效率:这不是我的第一个想法,但你是对的。我认为OP可能会使用复选框的jQuery装饰,即使对于具有50-100个输入的页面,这也可能是致命的。 – OzrenTkalcecKrznaric