2012-09-25 5 views
1

컨트롤러에 다시보기에서 전체 모델을 전달 모든 것이 잘있다나는 목록을 가지고

@using ClientDependency.Core.Mvc 
@model IEnumerable<TrackingOperaciones.Controllers.Items> 

@{ 
    ViewBag.Title = "Ver Items"; 
    Layout = "~/Views/Shared/_Layout.cshtml"; 
} 
<br/> 
@using (Html.BeginForm("CargarRecibidos", "Recepcion", FormMethod.Post)) 
{  
<table class="table table-striped table-bordered table-condensed"> 
    <tr> 
     <th> 
      Numero 
     </th> 
     <th> 
      Sucursal 
     </th> 
     <th> 
      Area 
     </th> 
     <th> 
      Sector 
     </th> 
    </tr> 
    @foreach (var item in Model) 
    { 
    <tr> 
     <td> 
      @Html.DisplayFor(modelItem => item.Nro_Item) 
     </td> 
     <td> 
      @Html.DisplayFor(modelItem => item.Sucursal.descripcion) 
     </td> 
     <td> 
      @Html.DisplayFor(modelItem => item.Area.descripcion) 
     </td> 
     <td> 
      @Html.DisplayFor(modelItem => item.Sector.Descripcion) 
     </td> 
     <td> 
      @Html.CheckBoxFor(modelItem => item.ID_Estado) 
     </td> 
    </tr> 
    } 
</table> 
<p> 
    <input class="btn" name="Guardar" type="submit" value="Guardar"/> | 
    @Html.ActionLink("Volver al listado de Recepción", "Index") 
</p> 
} 

까지 : 이제 문제는 컨트롤러에서 확인 된 값을 가진 전체 모델을 다시 처리하여 다음과 같이 처리합니다.

[HttpPost] 
public ActionResult CargarRecibidos(IEnumerable<Items> items) 
     { 
      if (ModelState.IsValid) 
      { 
       //do something here 
      } 
      return RedirectToAction("Index"); 
     } 
    } 

"항목"포스트 백에 빈 돌아왔다 erably 때문에 내가 해요

@using (Html.BeginForm("CargarRecibidos", "Recepcion")) 
{ 
    <input class="btn" name="Guardar" type="submit" value="Guardar"/> 
} 

저를 도와주세요 뭔가 형태 잘못된 것 같다!

답변

2

사용을 IEnumerable은

그런 다음 컨트롤러 입력 매개 변수 목록이 될 것입니다

아마 또한 제출 양식 대신 JSON 객체와 AJAX POST를 사용하는 것이 (더 우아한/현대) 만 제출하기가 너무 잘합니다.

+0

좋아, 이제 모든 IEnumerable을하지만, 여전히 같은 문제 : 컨트롤러에서

<tr> <td> @Html.DisplayFor(modelItem => item.Nro_Item) @Html.Hidden("Nro_Item", item.Nro_Item) </td> <td> @Html.DisplayFor(modelItem => item.Sucursal.descripcion) </td> <td> @Html.DisplayFor(modelItem => item.Area.descripcion) </td> <td> @Html.DisplayFor(modelItem => item.Sector.Descripcion) </td> <td> @Html.CheckBox("checkbox" + item.Nro_Item, item.ID_Estado) </td> </tr> 

에만이 체크 박스를 처리하는 데 사용 할 수 있도록 숫자 항목에 바인딩합니다. – Milo

+0

브라우저 개발자 도구에서 실제로 게시 된 내용을보고 있습니까? 또한 FormMethod.Post 매개 변수를 Html 양식 도우미에 추가하십시오. –

+0

아니, 크롬을 사용하고 있으며 게시 된 데이터를 보는 방법을 모르겠습니다. – Milo

1

일부 문제는 확인란 만 양식 값이기 때문에 전체 모델을 게시하지 않습니다. 항목 번호를 추적하고 컨트롤러에서 특별히 확인란 값을 처리하려면 폼에 추가 숨겨진 값을 추가해야한다고 생각합니다. 항목 번호는 게시 된 값의 "확인란"에 추가되어 고유하게 유지됩니다.

[HttpPost] 
    public ActionResult CargarRecibidos(List<string> nro_item) 
    { 

     foreach (string item in nro_item) 
     { 
      var checkbox=Request.Form["checkbox" + item]; 
      if (checkbox != "false") // if not false then true,false is returned 
      { 
       // Do the action for true... 
      } 
      else 
      { 
       // Do the action for false 
      } 
     } 
     return View(); 
    } 
+0

고마워요! 그것은 작동하지만 괜찮 으면 전체 목록을 다시 컨트롤러로 데이터베이스에 보냅니다. – Milo

+0

문제 없습니다. 원래 코드에서 편집 할 수있는 유일한 변경 사항은 확인란에있는 것 같습니다. 모든 항목을 편집 가능하게하려면 물론 적절한 편집 필드를 추가하거나 적어도 숨겨진 필드를 추가해야합니다. 유용 할 수도있는 Phil Haack의 게시물이 있습니다. http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx – Turnkey

관련 문제