我有一个时间表应用程序,其中View包含由jQuery加载的PartialView。主视图和PartialView是强类型的,具有不同的模型类型。
一切都可以正常加载数据。来自每个相应模型的数据将加载到主视图(包含所有客户和任务的下拉列表)和PartialView(具有输入字段的特定创建任务,记录数小时)。
但是,需要提交PartialView(包含表单),以便其模型可以更新数据库。通常,MVC绑定的简单性应该是模型的属性绑定到View中的字段,并且您只需提交然后保存模型即可。但它在这里不起作用。首先,我还需要通过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。我不知道这是否会更好,但这是我目前唯一的想法。或者我在这里做错了什么?如果有可能做我一直想做的事情,那我只是做错了吗?
答案 0 :(得分:0)
我假设您正在使用实体框架。但我没有看到你的控制器动作有任何变化。尝试修改代码如:
[HttpPost]
public ActionResult GetTasks(TasksViewModel tasksViewModel)
{
string test = tasksViewModel.Tasks.FirstOrDefault().ToString();
//Doesn't seem to work, I don't get the model back...
Tasks tasks = _model.Tasks.FirstOrDefault(s => s.ID.Equals(id)); //where id is the row id
UpdateModel(tasks,taskViewModel); //where Tasks is your table
_model.SaveChanges();
return PartialView(GetTaskModel());
}