2014-09-04 3 views
0

사용자가 DB에서 확인란의 값을 업데이트하려고합니다.컨트롤러 - DB에서 확인란의 값에 액세스

뷰에는 사용 가능한 모든 작업자가 DB에 나열됩니다. 그러나 체크 박스 목록에 액세스하려고하면보기가 잘못된 데이터를 전달합니다. 예. 단 3 개의 체크 박스가 있으며, 5 개의 true/false 값을 전송합니다.

정말 고맙습니다.

디자인 @Html.CheckBox@Html.CheckBoxFor에 의해 2 개 입력, 체크 박스와 숨겨진 입력을 렌더링하기 때문에보기 샘플 코드

@using (Html.BeginForm("UpdateWorkersForTask", "Tasks", FormMethod.Post)) 
{ 
<table> 
    <tr> 
     <th></th> 
    </tr> 

@foreach (var item in Model) { 
     <tr> 
      <td> 
       @Html.DisplayFor(modelItem => item.isChecked) 
       @Html.CheckBox("WorkersID", item.isChecked) 

     </tr> 
    } 

못할 것이고, 컨트롤러가

[HttpPost] 
public ActionResult UpdateWorkersForTask(IEnumerable<bool> WorkersID, IEnumerable<string> hiddens) { } 

답변

1

입니다. 당신이 HTML을 검사하는 경우는 그 이유가 체크되지 않은 체크 박스가 다시 게시하지 않는 것이

<input name="WorkersID" type="checkbox" value="true"> 
<input name="WorkersID" type="hidden" value="false"> 

같은 것을 볼 수 있습니다. 두 번째 입력은 값이 다시 게시되도록합니다. 체크 박스가 체크 된 경우 DefaultModelBinder은 첫 번째 값을 읽으며 두 번째 값은 무시합니다 (이름이 같기 때문에).

당신의 경우에는 모델에 바인딩하지 않고 단지 WorkersID이라는 이름으로 모든 입력을 읽는 것입니다. 3 개의 항목이 있지만 5 개의 값이 다시 게시되면 두 개의 상자를 확인한 것입니다. 다음과 같이이 문제를 해결하려면

는 (당신의 모델은 IList에게 그렇게 for 루프 작동 할 필요가 있습니다, 또는 다른 사용자 정의 EditorTemplate

보기

for(int i = 0; i < Model.Count i++) 
{ 
    @Html.CheckBoxFor(m => m[i].WorkersID) 
} 

을 사용할 수 있습니다보기 및 작업 방법을 수정 컨트롤러

[HttpPost] 
ActionResult UpdateWorkersForTask(IEnumerable<YourModelType> model) 
{ 
    foreach(YourModelType item in model) 
    { 
    // do something with the value of item.WorkersID 
+0

고맙습니다. 스티븐 –