본문 바로가기
개발/ASP.NET

ASP.NET MVC : 비연속의 Array 요소를 Model에 바인딩 시키기

by ispie 2019. 1. 23.

과제

프론트 엔드 측에서 특정의 조건일때만 input 항목을 생성시켜 입력값을 넘겨 받는데 그 입력 항목이 배열일 경우에는 name값의 순서가 연속성을 가지지 않기 때문에 Model에 바인딩 되지 않는 경우가 있었습니다.

 

해결방법

각각의 입력 요소인 <input type=”text” name=”Items[0].Name”> 의 앞에 <input type=”hidden” name=”Items.Index” value=”0” /> 를 추가 하는 것으로 비연속적인 index를 가지고 있는 배열 값이라도 정상적으로 Model에 바인딩 되는것을 확인하였습니다.

확인한 MVC버젼은 5입니다.

 

View (.cshtml 확장자)

<input type="hidden" name="Items.Index" value="0" />
<input type="text" name="Items[0].Name" value="someValue1" />

<input type="hidden" name="Items.Index" value="1" />
<input type="text" name="Items[1].Name" value="someValue2" />

<input type="hidden" name="Items.Index" value="3" />
<input type="text" name="Items[3].Name" value="someValue3" />

<input type="hidden" name="Items.Index" value="4" />
<input type="text" name="Items[4].Name" value="someValue4" />

 

Model

public class TestModel
{
	public List Items { get; set; }
}

public class Item
{
	public string Name{ get; set; }
}

 

 

참고

MVC3 Non-Sequential Indices and DefaultModelBinder

https://stackoverflow.com/questions/8598214/mvc3-non-sequential-indices-and-defaultmodelbinder/8598287#8598287

 

 

원글 작성일  2016-12-27

댓글