在MVC 2应用程序中的部分视图中传递模型?

时间:2010-12-09 08:12:05

标签: jquery asp.net-mvc-2 asp.net-mvc-partialview

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

1 个答案:

答案 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());
}