2014-11-06 4 views
0

제가 DailyTasks 모델과 모델이라는 모델이 있다고 가정 해 봅니다. 초기보기는 DailyTasks 모델을 사용하여 강력하게 형식화됩니다. 그날의 기존 작업 목록을 보여줍니다. 사용자는 추가 버튼을 클릭하여 목록/표에 더 많은 작업을 추가 할 수 있습니다. 추가 버튼을 클릭하면 작업 모델에 연결된 부분보기가 렌더링됩니다.부분보기 데이터를 컨트롤러에 전달

나는 사용자가 기존 작업뿐만 아니라 새로 추가 된 작업에 대한 변경 사항을 저장할 수 있기를 원합니다.

나는 이것을 수행하는 가장 좋은 방법이 확실하지 않습니다. 저는 모델 바인딩을 사용하여 놀았으며 모델의 json 객체를 생성 한 다음 저장시 컨트롤러에 전달했습니다. 지금까지는 기존 작업을 저장 컨트롤러로 되돌릴 수 있었지만 새로 추가 된 작업은 표시되지 않았습니다.

모델 :

public class DailyTasks 
{ 
    public int ID { get; set; } 
    public List<Task> TaskList{ get; set; } 
} 

public class Task 
{ 
    public int Id { get; set; } 
    public string MyTask { get; set; } 
} 

홈페이지보기 :

@model Example.Models.DailyTasks 

@using (Ajax.BeginForm("Save", "DailyTasks", new AjaxOptions { HttpMethod = "Post" })) 
{ 
<input type="button" value="Add New Task" id="addBtn" /> 
<input type="submit" value="Save" id="saveBtn"/> 

<table class="table"> 
    <tr> 
     <th>Column Header Name Goes Here</th> 
     <th>Column Header Name Goes Here</th> 
    </tr> 

    @for (var i = 0; i < Model.TaskList.Count(); i++) 
    { 
    <tr> 
     <td> 
      @Html.DisplayFor(m => Model.TaskList[i].ID) 
      @Html.HiddenFor(m => Model.TaskList[i].ID) 
     </td> 
     <td> 
      @Html.DisplayFor(m => Model.TaskList[i].MyTask) 
      @Html.HiddenFor(m => Model.TaskList[i].MyTask) 
     </td> 
    </tr> 
    } 
</table> 
} 

<script type="text/javascript"> 
$(document).ready(function() { 
    $("#addBtn").on("click", function() { 
     $.get('@Url.Action("AddTask")', function (data) { 
      $("table tbody").append(data); 
     }); 
    }); 
}); 
</script> 

부분보기위한 새로운 작업 AcitionResult 추가 :

public ActionResult AddTask() 
    { 
     Task model = new Task(); 
     return PartialView("_AddTask", model); 
    } 

부분보기 (_AddTask) :

@model Example.Models.Task 

    <tr> 
     <td> 
      @Html.DisplayFor(m => Model.ID) 
      @Html.HiddenFor(m => Model.ID) 
     </td> 
     <td> 
      @Html.DisplayFor(m => Model.MyTask) 
      @Html.HiddenFor(m => Model.MyTask) 
     </td> 
    </tr> 
+0

컨트롤러/뷰의 코드를 제공 할 수 있습니까? 모델에 기반한 "최상의 방법"제안을하기가 어렵습니다. – wahwahwah

+0

이 링크 http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx/ 및 특히 비순환 색인의 일부를보십시오. – Tobias

+0

나는 코드를 제공했다. 죄송합니다. 조금 길어요. 개념은 간단합니다. 난 그냥 부분보기를 렌더링하고 기본보기의 테이블에 추가하여 목록에 새 항목을 추가하려고합니다. 내가 여기서 고민하는 유일한 문제는 제출시 원래의 작업 목록 만 되돌려 보내고 새로 추가 된 작업 (일명 부분보기 항목)은 다시 게시되지 않는다는 것입니다. 크롬 디버그 도구가 제대로 추가되었는지 확인하고 거기에 있습니다. 디버그 도구의 스크린 샷이 필요한지 알려주십시오. 이 사람들을 조사해 주셔서 미리 감사드립니다. – NKD

답변

0

정확하게 여기 내가 필요한 것을 찾았습니다 : http://blog.stevensanderson.com/2010/01/28/editing-a-variable-length-list-aspnet-mvc-2-style/ 이제 전통적인 방법 (FormCollection 및 Request) 대신 모델 바인딩 메서드를 사용할 수 있습니다.

앞으로 도움이되기를 바랍니다. 또한 Tobias의 링크 덕택입니다. 그것은 분명히 내가 제시 한 핵심 문제를 논의하지만 불행히도 거기에서 발견 된 해결책은 나의 경우에는 효과가 없다.

건배!

관련 문제