我有一個使用大量AJAX的ASP.NET MVC頁面。在最基本的層面上,它包含一系列問題,每個問題都有一個問題清單。我的觀點模型(大大簡化了這一問題的緣故):在列表中添加一個新項目由編輯器模板呈現
視圖模型:
public class QuestionViewModel
{
....
public string QuestionText { get; set; }
public List<AnswerViewModel> AnswerList { get; set; }
public bool EditMode { get; set; }
....
}
public class AnswerViewModel
{
....
public string Answer { get; set; }
....
}
_View.cshtml:
@model QuestionViewModel
@if(Model.EditMode)
{
@Html.EditorFor(x => x)
}
else
{
...
}
QuestionViewModel.cshtml(編輯模板):
@model Project.Models.QuestionViewModel
....
@Html.EditorFor(x => x.AnswerList)
....
AnswerViewModel.cshtml(編輯模板):
@model KSUAdvising.Models.AnswerViewModel
....
@Html.TextBoxFor(x => x.Answer)
....
^^^這EditorFor呼叫使我的答案列表罰款(用適當的指數沿着這樣的模型綁定將綁定回到列表恰如其分。即:
<input id="AnswerList_0__Answer" name="AnswerList[0].Answer" type="text" value="Yes">
<input id="AnswerList_1__Answer" name="AnswerList[1].Answer" type="text" value="No">
然而,在客戶端,我需要的物品,當用戶點擊一個按鈕添加到這個列表。這需要發生在客戶端,因此在用戶保存問題之前不會更改數據庫。
我看到幾個方向去解決這個問題:
- 做一個AJAX調用服務器來渲染回一個新的空白答案,並把它添加到DOM。然而,由於這個問題脫離了問題的上下文,它不會呈現正確的名稱(索引),並且它不會被模型聯編程序拾取。
- 向客戶端呈現隱藏的HTML「模板」,包括正確的輸入名稱,然後克隆該模板並修改名稱索引以滿足模型聯編程序。這看起來有點冒失,很難正確渲染這個模板。
這似乎是一種常見的情況,但我很難提出一個很好的解決方案。這種情況下推薦的方法是什麼?