2013-07-25 3 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를 사용할 수 없습니다. 사전을 바인딩하는 더 좋은 방법이 있습니까? 맞춤 바인더를 써야하나요? 그렇다면 어떻게 생겼을까요?

코스 민, 감사

당신이 조금 다르게

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

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

I과 같이해야 값을 당겨하는 데 필요한 foreach 문에 있기 때문에

답변

0

100 % 당신이 kvp.Value를 할 수 있다고 확신하지 못합니다. 사전을 반복적으로 검색하여 이것을 찾았습니다. What is the best way to iterate over a Dictionary in C#?

+0

Dictionary는'IEnumerable >'를 구현하므로 실제로 반복 할 수 있습니다. 또한 작동하지 않을 것입니다 (글쎄, 게시 할 때까지 작동하는 것 같습니다). – Casey