2011-03-23 61 views
3

我試圖實現一些相當簡單的事情,但有一些與模型綁定的問題。詞典<枚舉,字符串>()不會綁定到mvc模型

public enum ColumnType 
     { 
      Column1 = 1, 
      Column2 = 2, 
      Column3 = 3, 
      Column4 = 4, 
      Column5 = 5, 
      Column6 = 6, 
      Column7 = 7, 
      Column8 = 8, 
      Column9 = 9 
     } 

而且在我的ViewModel我有型詞典的屬性格式如下:

public class PageViewModel { 
     public IDictionary<ColumnType, string> Columns { get; set; } 
} 

以下是我的觀點看起來像:

<tr> 
    <% foreach (var value in Enum.GetValues(typeof(ColumnType))) 
     { 
      %> 
       <%: Html.TextBox(String.Format("Columns[ColumnType.{0}]", value.ToString()))%> 
      <% 
     } 
    %> 
    </tr> 

我上面張貼以下POST方法:

[POST] 
public ActionResult Index(PageViewModel viewModel) 
{ 
    var isNull = viewModel.Columns; //The model won't bind and 'isNull' is 'null' in here 
    ... 
    ... 
} 

如您所見,POST操作中的'viewModel.Columns'屬性爲null。

我在這裏錯過了什麼?

關於結果,它應該看起來像以下:

// pseudocode 
Columns[0] = Key=Column1, Value="text1Value"; 
Columns[1] = Key=Column2, Value="text2Value"; 
... 

我知道一定是有什麼樣Columns[0].Key = Column1; Column[0].Value = "text1Value"視圖裏面,但我不知道。

非常感謝你們!

回答

2

嘗試這樣的:

public class HomeController : Controller 
{ 
    public ActionResult Index() 
    { 
     var model = new PageViewModel 
     { 
      Columns = Enum.GetValues(typeof(ColumnType)).Cast<ColumnType>().ToDictionary(x => x, x => x.ToString()) 
     }; 
     return View(model); 
    } 

    [HttpPost] 
    public ActionResult Index(PageViewModel model) 
    { 
     return View(); 
    } 
} 

,並在視圖:

<% using (Html.BeginForm()) { %> 
    <% for (var i = 0; i < Model.Columns.Count; i++) { %> 
     <%= Html.Hidden("Columns[" + i + "].Key", Model.Columns.ElementAt(i).Key) %> 
     <%= Html.TextBox("Columns[" + i + "].Value", Model.Columns.ElementAt(i).Value) %> 
    <% } %> 
    <input type="submit" value="OK" /> 
<% } %> 
+0

你擊中了腦袋上的指甲!這工作!太感謝了 !!! – Gurdeep 2011-03-23 13:33:58

0

當然這將是null因爲你沒有初始化它。

你可以寫一個構造函數到PageViewModel,它將實例化(通過new關鍵字)並填充列及其對應的值。

PageViewModel model = new PageViewModel(); 

即使如此,我想既然格式要輸出到不與你在你的問題的最後描述了符合你沒有解釋你的問題夠。

+0

感謝您的答覆!但是我在GET方法中已經做了'init'部分。我已經避免在此提及,因爲這是理解的。關於輸出,這只是僞代碼。請嘗試再次聯繫事情。再次感謝。 – Gurdeep 2011-03-23 13:17:01

相關問題