2013-07-25 125 views
0

我在互联网上浏览过,但没有一个解决方案似乎适用于我。MVC 4绑定到字典

我有以下视图模型:

public class ConfigsViewModel 
{ 
    // iOS Dictionary 
    public Dictionary<string, object> IosDictionary { get; set; } 

    // Android Dictionary 
    public Dictionary<string, object> AndroidDictionary { get; set; } 
} 

在这些字典的值是布尔任一或字符串。我想显示一个像编辑视图一样的表格,并且我想要绑定这些字典。我的看法是这样的:

@model MobileRebrandingTool.Models.ViewModels.ConfigsViewModel

<div> 
    @using (Html.BeginForm("SaveAppConfig", "Project", "POST")) 
    { 
     <table class="config-table"> 
      <tr> 
       <th></th> 
       <th>iOS</th> 
       <th>Android</th> 
      </tr> 
      @foreach (var kvp in Model.IosDictionary) 
      { 
       <tr> 
        <td> 
         @kvp.Key 
        </td> 
        <td> 
         @Html.EditorFor(model => model.IosDictionary[kvp.Key]) 
        </td> 
        <td> 
         @if (Model.AndroidDictionary.ContainsKey(kvp.Key)) 
         { 
          @Html.EditorFor(model => model.AndroidDictionary[kvp.Key]) 
         } 
        </td> 
       </tr> 
      } 
     </table> 
     <input type="submit" value="Save"/>  
    } 
</div> 

的问题是,在SaveAppConfig行动,当我检查的模式,而不是一个字符串作为在键值字典中,值是一个字符串的数组(文本输入中的值)。 在字典中,我将bool和字符串作为值,所以我无法使用TextBoxFor。 有没有更好的方法来绑定字典?我应该写一个自定义联编程序?如果是这样,它应该是什么样子?

谢谢

科斯明

回答

0

既然你是在foreach你需要拉一点点不同

@foreach(var kvp in Model.IosDictionary){ 
    @Html.EditorFor(model => model.IosDictionary[kvp.Key]) 
} 

应该像

@foreach(var kvp in Model.IosDictionary){ 
    @Html.EditorFor(model => kvp.Value) 
} 

我的价值我不是100%肯定你可以做kvp.Value。看着迭代字典,发现这个What is the best way to iterate over a Dictionary in C#?

+0

字典实现'IEnumerable >',所以你可以,实际上,它可以迭代它。此外,这将无法正常工作(好吧,它会似乎工作,直到你发布)。 – Casey