我有一个时间表应用程序,其中一个视图包含一个由 jQuery 加载的 PartialView。主 View 和 PartialView 使用不同的模型类型进行强类型化。
加载数据一切正常。每个模型的数据被加载到主视图(包含所有客户和任务的下拉列表)和 PartialView(特定创建的任务,输入字段记录小时数)。
但是,需要提交 PartialView(包含表单),以便其模型可以更新数据库。通常,MVC 绑定的简单性应该是模型的属性绑定到视图中的字段,并且您可以提交然后保存模型。但它在这里不起作用。首先,我似乎还需要通过 jQuery 提交 PartialView,就像我需要以这种方式获取数据一样。因为如果我只使用提交输入字段,则 PartialView 是唯一返回的内容(返回时它会占用整个页面)。所以我这样做了:
单击保存时间按钮时:
$('#savehours').click(function (event) {
alert('Test');
var form = $('#hoursForm');
var actionUrl = '<%= Url.Action("GetTasks", "Timesheet") %>';
$.ajax({
type: "POST",
url: actionUrl,
data: form.serialize(),
error: function (xhr, status, error) {
//do something about the error
},
success: function (data) {
$('#tasksDiv').html(data);
}
});
});
在控制器中:
[HttpPost]
public ActionResult GetTasks(TasksViewModel tasksViewModel)
{
string test = tasksViewModel.Tasks.FirstOrDefault().ToString(); //Test for debugging...
//Doesn't seem to work, I don't get the model back...
_model.Save();
return PartialView(GetTaskModel());
}
正如我的评论所示,我使用一个简单的字符串进行了测试,以查看我是否可以访问绑定到 PartialView 中的字段的模型,但我没有。
我现在想我可能会尝试使用 ViewData 而不是将模型传递给 View,然后将字段绑定到 ViewData。我不知道这是否会更好,但这是我目前唯一的想法。还是我在这里做错了什么?是否有可能做我一直想做的事情,只是我做错了?