2012-09-09 75 views
1

我正在關注this教程。任何人都可以請向我解釋我如何使文本框綁定回字典?現在發生的所有事情是在文本框中顯示的數據 - 但是如果我更改文本框,我該如何綁定回該對象?我錯過了什麼?以下是我的代碼:MVC綁定字典

<input type="text" name="@Model.ExpirimentToRemove[i].Value.Title" value="@Model.ExpirimentToRemove[i].Value.Title"/> 
<input type="text" name="@Model.ExpirimentToRemove[i].Value.PreviewDescription" value="@Model.ExpirimentToRemove[i].Value.PreviewDescription"/> 
<input type="text" name="@Model.ExpirimentToRemove[i].Value.FullDescription" value="@Model.ExpirimentToRemove[i].Value.FullDescription"/> 

回答

2

您的文本輸入框的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> 
} 

在這個例子中,字典的關鍵字是一個簡單的字符串值,但你也可以使用一個複雜的類型。

+0

我試過你的例子。我改變了密鑰以適應我的對象。它成功顯示數據,但不保存我所做的更改。當我點擊提交併將鼠標懸停在斷點處的對象上時,它最初包含的數據是在首先調用View()之前。 – Subby

+0

你在哪裏做這些改變?在POST操作中?在這種情況下,您必須在返回視圖之前清除ModelState:'ModelState.Clear();否則TextBox助手將使用最初發布的值。另一種可能性是簡單地對文本輸入進行硬編碼,而不是使用TextBox幫助器:'。 –

+0

@DarinDimitrov這對字典工作正常,但我怎樣才能達到與列表>在MVC。這些值顯示在視圖中,但發佈時,所有字段均爲空 – Kayani