본문 바로가기

.NET/MVC.NET

MVC.NET IEnumerable<T> Model Bind하기


프로젝트를 하는데 테이브에 보여지는 모든 데이터값들을 서버로 보내야 하는 일이 있었습니다.

어떻게 할까 하다가  옛날(별로좋지않음) 방식으로 해보았습니다.

 
View단에서 아래와 같이 코딩을 합니다.

@functions{
    string CreateName(string propertyName, int index){
        string modelName = "inputModel";
        return String.Format("{0}[{1}].{2}", modelName, index, propertyName);
    }
}
<form name="inputData" id="inputData"> 
 @foreach (var item in Model)
        {            
            <tr>
                <td class="first">
                    <input type="checkbox" name="@CreateName("CheckedValue"index)" value="1" class="iCheckbox" />
                    <input type="hidden" name="@CreateName("process_cd"index)" value="@item.process_cd" />
                    <input type="hidden" name="@CreateName("process_year"index)" value="@item.process_year" />
                    <input type="hidden" name="@CreateName("process_term"index)" value="@item.process_term" />
                    <input type="hidden" name="@CreateName("user_id"index)" value="@item.user_id" />
                    <input type="hidden" name="@CreateName("cp_cd"index)" value="@item.cp_cd" />
                    <input type="hidden" name="@CreateName("company_seq"index)" value="@item.company_seq" />
                    <input type="hidden" class="enroll_end_date" name="@CreateName("enroll_end_date"index)" value="@((item.enroll_end_date??DateTime.Now).ToShortDateString())" /> 
                </td>
    </tr> 
 

위의 코드를 보면 functions에 규칙적인 form data에 이름을 부여하는 것을 알수 있습니다.

저렇게 하여 서버단에서 inputModel을 받는 Action Method를 만들면 그대로 inputModel에 

모델바인더가 데이터를 바인딩 시킵니다.

서버 코드를 보면 아래와 같습니다.
 
        [HttpPost]
        public virtual ActionResult SaveConfirmType(List<SaveConfirmTypeInputModel> inputModel, string confirmType)
        {
            if (_service.SaveConfirmType(inputModel.Where(d => d.IsChecked == true), confirmType))
                return Content("OK");
            else return Content("Fail");             
        } 

위의 코드를 보면 SaveConfirmTypeInputModel을 만들어서 inputType을 정의 하였습니다.

위의 view단에서 form submit을 하면 모델 바인더가 서버의 inputModel에게 데이터를 바인딩 시켜줍니다.

참 쉽죠잉.... 테이블에 모든 데이터가 서버로 보내져 별로 좋지 않은 방법입니다만 .. 초치기 개발에서는

매우 효과적입니다. ^^