您的文本輸入框的name
是錯誤的。您已經將模型的價值放在了位置上,而不是像Hanselman的博客文章中所解釋的那樣適當地命名它。
因此,讓我們假設你有一些視圖模型:
public class ItemViewModel
{
public string Title { get; set; }
public string PreviewDescription { get; set; }
public string FullDescription { get; set; }
}
和包含字典中的主視圖模型:
public class MyViewModel
{
public Dictionary<string, ItemViewModel> ExpirimentToRemove { get; set; }
}
和您的POST控制器行動接受了這一觀點模型參數:
[HttpPost]
public ActionResult Remove(MyViewModel model)
{
...
}
爲了正確綁定到這個視圖模型,你可以有如下:
@model MyViewModel
@using (Html.BeginForm())
{
@for (var i = 0; i < Model.ExpirimentToRemove.Count; i++)
{
<div>
@Html.TextBox(
"ExpirimentToRemove[" + i + "].Key",
Model.ExpirimentToRemove[i].Key
)
@Html.TextBox(
"ExpirimentToRemove[" + i + "].Value.Title",
Model.ExpirimentToRemove[i].Value.Title
)
@Html.TextBox(
"ExpirimentToRemove[" + i + "].Value.PreviewDescription",
Model.ExpirimentToRemove[i].Value.PreviewDescription
)
@Html.TextBox(
"ExpirimentToRemove[" + i + "].Value.FullDescription",
Model.ExpirimentToRemove[i].Value.FullDescription
)
</div>
}
<p><button type="submit">OK</button></p>
}
在這個例子中,字典的關鍵字是一個簡單的字符串值,但你也可以使用一個複雜的類型。
我試過你的例子。我改變了密鑰以適應我的對象。它成功顯示數據,但不保存我所做的更改。當我點擊提交併將鼠標懸停在斷點處的對象上時,它最初包含的數據是在首先調用View()之前。 – Subby
你在哪裏做這些改變?在POST操作中?在這種情況下,您必須在返回視圖之前清除ModelState:'ModelState.Clear();否則TextBox助手將使用最初發布的值。另一種可能性是簡單地對文本輸入進行硬編碼,而不是使用TextBox幫助器:'。 –
@DarinDimitrov這對字典工作正常,但我怎樣才能達到與列表>在MVC。這些值顯示在視圖中,但發佈時,所有字段均爲空 –
Kayani