将部分视图数据传递给控制器
问题描述:
假设我有一个模型DailyTasks和一个模型任务。使用DailyTasks模型强制输入初始视图。它显示当天现有任务的列表。用户可以通过单击添加按钮将更多任务添加到列表/表格中。点击添加按钮时,我呈现与任务模型绑定的局部视图。将部分视图数据传递给控制器
我希望能够保存用户对现有任务所做的任何更改以及新添加的任务。
我不确定什么是最好的方法来做到这一点。我一直在玩模型绑定,以及创建模型的json对象,然后在保存时将其传递给控制器。到目前为止,我只能将现有任务传回到Save控制器,没有任何新添加的任务显示出来。
型号:
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>
答
我在这里找到了我所需要的:http://blog.stevensanderson.com/2010/01/28/editing-a-variable-length-list-aspnet-mvc-2-style/现在我可以使用modelbinding方法而不是传统的方式(FormCollection和Request)。
我希望它可以帮助未来的人。另外,感谢Tobias的链接。这肯定是讨论我提出的核心问题,但不幸的是,在那里发现的解决方案没有在我的情况下工作。
干杯!
你能提供你的控制器/视图的代码吗?它很难仅基于模型制定“最佳方式”建议。 – wahwahwah 2014-11-07 07:08:28
看看这个链接http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx/,尤其是非顺序索引的一部分。 – Tobias 2014-11-07 07:50:33
我已经提供了代码。对不起,它有点冗长。这个概念很简单。我只是试图通过渲染一个局部视图并将其添加到主视图上的表中来将新项添加到列表中。我在这里挣扎的唯一问题是,在提交时,它只发送原始任务列表,并且没有任何新添加的任务(又称局部视图项目)被回发。我检查铬调试工具,以确保它正确地附加,它在那里。让我知道你是否需要调试工具的屏幕截图。提前感谢您对这些人的看法。 – NKD 2014-11-07 16:09:17