programing tip

사전에 ASP.NET MVC 바인딩

itbloger 2020. 11. 23. 07:53
반응형

사전에 ASP.NET MVC 바인딩


MVC 내에서 사전 값을 바인딩하려고합니다.

나는 행동 내에서 :

model.Params = new Dictionary<string, string>();

model.Params.Add("Value1", "1");
model.Params.Add("Value2", "2");
model.Params.Add("Value3", "3");

보기 내에서 다음과 같습니다.

@foreach (KeyValuePair<string, string> kvp in Model.Params)
{ 
<tr>
  <td>
    <input type="hidden" name="Params.Key" value="@kvp.Key" />
    @Html.TextBox("Params[" + kvp.Key + "]")
  </td>
</tr>
}

그러나 뷰는 초기 값을 표시하지 않으며 양식이 제출되면 Params속성이 null입니까?


Scott Hanselman의이 게시물을 살펴보아야합니다. http://www.hanselman.com/blog/ASPNETWireFormatForModelBindingToArraysListsCollectionsDictionaries.aspx

기본 바인더는 다음 형식의 사전을 이해합니다.

params[0].key = kvp.key
params[0].value = kvp.value

매개 변수의 색인은 0부터 시작하여 공백없이 순차적이어야합니다. 현재 도우미는이를 지원하지 않으므로 양식 입력 필드를 직접 만들어야합니다.

물론 다음과 같이 자신의 바인더를 구현할 수 있습니다. http://siphon9.net/loune/2009/12/a-intuitive-dictionary-model-binder-for-asp-net-mvc/


ASP.NET MVC 4에서 기본 모델 바인더는 일반적인 사전 인덱서 구문을 사용하여 사전을 바인딩합니다 property[key].

Dictionary<string, string>모델에 가있는 경우 이제 다음 마크 업을 사용하여 직접 다시 바인딩 할 수 있습니다.

<input type="hidden" name="MyDictionary[MyKey]" value="MyValue" />

예를 들어 체크 박스 세트를 사용하여 사전 요소의 하위 집합을 선택하고 동일한 속성에 다시 바인딩하려면 다음을 수행 할 수 있습니다.

@foreach(var kvp in Model.MyDictionary)
{
    <input type="checkbox" name="@("MyDictionary[" + kvp.Key + "]")"
        value="@kvp.Value" />
}

ANTP의 대답 @ 구축, MVC는 (적어도 더 많은 작업의 수행시키는, 더 적은 자세한 방법은 TextBoxFor()Dictionary<string, string>- 나는 시도하지 않은 CheckBoxFor()A의 Dictionary<xxx, bool>) :

@foreach(var kvp in Model.MyDictionary)
{
    @Html.Label(kvp.Key);
    @Html.TextBoxFor(m => m.MyDictionary[kvp.Key]);
}

참고 URL : https://stackoverflow.com/questions/5191303/asp-net-mvc-binding-to-a-dictionary

반응형