2011-03-23 29 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

相关问题