프로젝트를 하는데 테이브에 보여지는 모든 데이터값들을 서버로 보내야 하는 일이 있었습니다.
어떻게 할까 하다가 옛날(별로좋지않음) 방식으로 해보았습니다.
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에게 데이터를 바인딩 시켜줍니다.
참 쉽죠잉.... 테이블에 모든 데이터가 서버로 보내져 별로 좋지 않은 방법입니다만 .. 초치기 개발에서는
매우 효과적입니다. ^^