我有一個表格,動態生成很多複選框(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