2017-11-15 2 views
0

뷰에는 각각 체크 박스가있는 항목 목록이 있습니다. 폼의 목적은 상자를 체크 한 다음 목록을 db로 리턴하는 것입니다. 숨겨진 시드와 체크 박스 값으로 채워진 ViewModel의 PickList 모델을 보길 원하지만 폼은 항상 PickList를 null로 제출합니다. 모델 발생할 수 있습니다 @Html.DisplayFor를 사용MVC 폼은 null 모델을 다시 컨트롤러로 반환합니다.

@model Inventory.ViewModels.ExtractionViewModel 

<div class="col-md-4"> 
    <button class="btn btn-primary" type="submit" form="pick-list-form">Update Pick List</button> 
</div> 

@using (Html.BeginForm("UpdatePickList", "Extraction", FormMethod.Post, new { @id = "pick-list-form" })) 
{ 
    <table class="table"> 
     <tr> 
      <th> 
       Seed Reference 
      </th> 
      <th>Extracted?</th> 
     </tr> 

     @foreach (var item in Model.PickList) 
     { 
      <tr> 
       <td> 
        @Html.HiddenFor(modelItem => item.ExtractionId) 
        @Html.HiddenFor(modelItem => item.SeedId) 
        @Html.DisplayFor(modelItem => item.SeedId) 
       </td> 
       <td> 
        @Html.CheckBoxFor(modelItem => item.IsExtracted) 
       </td> 
      </tr> 
     } 
    </table> 
} 

View Model 

public class ExtractionViewModel 
{ 
    public ExtractionDTO Extraction{ get; set; } 
    public List<PickListDTO> PickList { get; set; } 
} 

Pick list model 

public class PickListDTO 
{ 
    public int ExtractionId { get; set; } 
    public int SeedId { get; set; } 
    public bool IsExtracted { get; set; } 
} 
+0

버튼이 양식 외부로 전송되는 이유는 무엇입니까? –

+0

제출 버튼을 다른 위치에두고 form = ""이 허용하도록되어 있습니다. 그것은 제출하므로 작동한다고 가정합니다. – BattlFrog

+0

@ G-Town - foreach를 일반 for 루프로 전환하면 트릭이 나았습니다. 감사. – BattlFrog

답변

0

다시 NULL로 확인할 수 있습니다.@Html.TextBoxFor을 사용할 수 있습니다.

그리고 단지가 생각 나게 :

사용 HiddenFor을 사용하면 사용자가 인식 할 필요가 없다는 게시 된 데이터를 제공하려는 경우.

레코드를 표시하고 편집 할 수 없도록하려면 DisplayFor을 사용하십시오.

사용자 입력을 허용하거나 사용자가 필드를 편집 할 수있게하려면 TextBoxFor을 사용하십시오.

도움이 되었기를 바랍니다.

+0

하지만 입력란이므로 확인란이 데이터를 게시해야합니다. 기술적으로 숨겨진 것도 입력입니다. 그래서 당신은 디스플레이 포스터의 단순한 존재가 전체 형태를 무효화하고 있다고 말하고 있습니까? – BattlFrog

관련 문제