0

我有一个时间表应用程序,其中一个视图包含一个由 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。我不知道这是否会更好,但这是我目前唯一的想法。还是我在这里做错了什么?是否有可能做我一直想做的事情,只是我做错了?

4

1 回答 1

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());
}
于 2010-12-09T09:16:54.533 回答