통과 컨트롤러 형태 수집 및 Ilist
-
19-08-2019 - |
문제
사용자가 입력 할 동일한 항목 수를 지시 할 수있는 일부 요소를 포함하여 사용자가 완료 할 수있는 전체 데이터 입력 필드가 포함 된 양식이 있습니다. 이것은 Phil Haack의 블로그 항목에서 사용되는 것입니다. 목록에 모델 바인딩.
jQuery를 사용하여 추가 폼 요소, 올바르게 인덱싱 된 등을 만듭니다. 내 문제는 실제로 컨트롤러 내에서이를 읽는 가장 좋은 방법입니다. 이 기사의 컨트롤러는 하나의 객체만을 기대합니다. IList<Product>
내 컨트롤러는 이미 a를 기대하고 있습니다 FormCollection form
그리고 지금 나는 또한 그것을 보내려고 노력하고 있습니다 IList<Itmes>
또한.
이것을 컨트롤러가 기대하는 매개 변수에 추가하거나 [ "항목"] 또는 다른 양식을 통해 액세스해야합니까?
보다
<form action="/MyItems/Add" method="post">
<input type="text" name="Title" value="" />
<input type="hidden" name="myItem.Index" value="0" />
<input id="item[0].Amount" name="item[0].Amount" type="text" value="" />
<input id="item[0].Name" name="item[0].Name" type="text" value="" />
<input type="hidden" name="myItem.Index" value="1" />
<input id="item[1].Amount" name="item[1].Amount" type="text" value="" />
<input id="item[1].Name" name="item[1].Name" type="text" value="" />
</form>
제어 장치
public ActionResult Add(FormCollection form)
{
string Title = form["Title"];
List<Item> Items = form["items"].ToList();
}
DTO
public class Item()
{
int Amount {get; set; };
string Name {get; set; };
}
해결책 2
나는 독점적으로 함께 일하기로 결정했습니다 FormCollection
일부 데이터를 사용하여 물을 진흙 투성시키기보다는 FormCollection
그리고 다른 데이터는 프레임 워크에 의해 목록에 매핑됩니다. 아래 코드는 항목을 가져 와서 DTO를 수동으로 수화시킵니다. 이것은 잘 작동하며 내 코드 내에서 목록에 직접 매핑 할 수없는 다른 작업을 수행 할 수 있습니다.
List<Item> itemList = new List<Item>();
int i = 0;
while ( form["item[" + i + "].Amount"] != null)
{
itemList.Add(new Item()
{
Amount = Convert.ToInt32(form[String.Format("item[{0}].Amount",i )]),
Name = form[String.Format("item[{0}].Name",i )]
});
}
다른 팁
MyItem을 다음과 같은 매개 변수로 추가 할 수 있습니다.
public ActionResult Add(FormCollection form, List<Item> myItem)
{
}
그런 다음 양식 데이터로부터 자동으로 바인딩하고 MyItem 매개 변수를 채 웁니다.
나는 이것을 시도하지 않았으므로 당신은 그것을 가야하지만, updatemodel 또는 tryupdatemodel 메소드를 사용하지 않는 이유는 무엇입니까? 이것은 ILIST를 컨트롤러의 동작에 전달하는 것과 같은 방식으로 구속해야합니다.
그건:
public ActionResult Add(FormCollection form)
{
List<Item> items = new List<Item>();
TryUpdateModel(items, form);
}
나는 내 개발 컴퓨터에 있지 않기 때문에 그것이 효과가 있는지 확실하지 않지만 그렇게해야합니다. 필요한 것이면 알려주세요.
편집 : 엔티티 프레임 워크를 사용하는 경우 UpdateModel 방법으로 많은 문제가 생겼으며 내 자신의 글을 쓰는 데 의지했다는 점에 주목할 가치가 있습니다.