사전에 바인딩 할 수 있도록 입력란의 이름을 지정하는 방법에 대해 this blog post을 읽는 것이 좋습니다.
<input type="hidden" name="items[0].Key" value="key1" />
<input type="text" name="items[0].Value" value="15.4" />
<input type="hidden" name="items[1].Key" value="key2" />
<input type="text" name="items[1].Value" value="17.8" />
라인을 따라 뭔가를 생성 할 수있다 : 그래서 당신은 키에 대한 추가 숨겨진 필드가 필요합니다 말했다되고
<% var index = 0; %>
<% foreach (var key in Model.Keys) { %>
<%: Html.Hidden("items[" + index + "].Key", key) %>
<%: Html.TextBox("items[" + index +"].Value", Model[key]) %>
<% index++; %>
<% } %>
, 개인적으로 나는 당신이 사전을 사용하지 않는 것이 좋습니다 당신의 조회수. 그것들은 추악하고 모델 바인더에 적절한 이름을 생성하기 위해 추한 코드를 작성해야합니다. 나는 뷰 모델을 사용할 것이다.
모델 :
public class MyViewModel
{
public string Key { get; set; }
public double? Value { get; set; }
}
컨트롤러 :
public class HomeController : Controller
{
public ActionResult Index()
{
var model = new[]
{
new MyViewModel { Key = "key1", Value = 15.4 },
new MyViewModel { Key = "key2", Value = 16.1 },
new MyViewModel { Key = "key3", Value = 20 },
};
return View(model);
}
[HttpPost]
public ActionResult Index(IEnumerable<MyViewModel> items)
{
return View(items);
}
}
보기 (~/Views/Home/Index.aspx
) :
<% using (Html.BeginForm()) { %>
<%: Html.EditorForModel() %>
<input type="submit" value="OK" />
<% } %>
편집기 템플릿 (~/Views/Home/EditorTemplates/MyViewModel.ascx
) :
다음은 예입니다