我有兩個控制器函數:一個用於默認查看,一個用於回發。我使用第一個將一些默認值分配給模型列表。第二個是將附加值添加到列表中。之後,頁面顯示列表的內容。現在,除了最新的控制器功能外,我正在失去列表中的所有內容。ASP.NET MVC中的持久模型數據
我想讓我的模型數據堅持下去,這怎麼辦?
我有兩個控制器函數:一個用於默認查看,一個用於回發。我使用第一個將一些默認值分配給模型列表。第二個是將附加值添加到列表中。之後,頁面顯示列表的內容。現在,除了最新的控制器功能外,我正在失去列表中的所有內容。ASP.NET MVC中的持久模型數據
我想讓我的模型數據堅持下去,這怎麼辦?
我假設你有一個像這樣的情況:
public class Model {
public List<..> List { get; set; }
...
}
public class MyController
{
public ActionResult List() {
return View(new Model { List = new List<..> { /* some items */ } });
}
[HttpPost]
public ActionResult AddToList(Model model, string itemText) {
model.List.Add(/* another item with specified text*/);
return View("List", model);
}
}
在顯示的列表頁中您可能已增加了1項與AddToList動作或動作列表初始化項目的整個列表。發生的事情是很自然的,因爲你不會把名單放回去。
如果是這種情況,那麼您必須回發整個模型,包括列表本身以便將項目添加到現有列表。
這確實是爲列表頁面生成正確視圖的問題。觸發AddToList操作的表單必須包含整個模型/列表的日期。由視圖生成的HTML應該看起來像這樣:
...
<form method="POST" action="/MyController/AddToList">
<input type="hidden" name="model.List[0]" value="value1" />
...
<input type="hidden" name="model.List[N]" value="valueN" />
New item text: <input type="text" name="itemText" />
...
</form>
...
在數據庫中存儲數據(使用EF(http://msdn.microsoft.com/en-us/library/bb399572.aspx))。