제가 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>
컨트롤러/뷰의 코드를 제공 할 수 있습니까? 모델에 기반한 "최상의 방법"제안을하기가 어렵습니다. – wahwahwah
이 링크 http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx/ 및 특히 비순환 색인의 일부를보십시오. – Tobias
나는 코드를 제공했다. 죄송합니다. 조금 길어요. 개념은 간단합니다. 난 그냥 부분보기를 렌더링하고 기본보기의 테이블에 추가하여 목록에 새 항목을 추가하려고합니다. 내가 여기서 고민하는 유일한 문제는 제출시 원래의 작업 목록 만 되돌려 보내고 새로 추가 된 작업 (일명 부분보기 항목)은 다시 게시되지 않는다는 것입니다. 크롬 디버그 도구가 제대로 추가되었는지 확인하고 거기에 있습니다. 디버그 도구의 스크린 샷이 필요한지 알려주십시오. 이 사람들을 조사해 주셔서 미리 감사드립니다. – NKD