문제

사용자가 입력 할 동일한 항목 수를 지시 할 수있는 일부 요소를 포함하여 사용자가 완료 할 수있는 전체 데이터 입력 필드가 포함 된 양식이 있습니다. 이것은 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 방법으로 많은 문제가 생겼으며 내 자신의 글을 쓰는 데 의지했다는 점에 주목할 가치가 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top