Передача модели в PartialView в приложении MVC 2? - PullRequest
0 голосов
/ 09 декабря 2010

У меня есть приложение для составления расписания, где View содержит PartialView, который загружается jQuery.Основной вид и PartialView строго типизированы для разных типов моделей.

Все отлично работает для загрузки данных.Данные из каждой соответствующей модели загружаются в главное представление (выпадающие списки со всеми клиентами и задачами) и PartialView (определенные созданные задачи с полями ввода для зарегистрированных часов).

Однако PartialView (содержит форму)необходимо предоставить, чтобы его модель могла обновлять базу данных.Обычно простота привязки MVC должна заключаться в том, что свойства модели привязываются к полям в представлении, и что вы можете просто отправить и затем сохранить модель.Но это не работает здесь.Прежде всего, мне нужно также представить PartialView с помощью jQuery, как мне и было необходимо для получения данных таким образом.Потому что, если я просто использую поле ввода submit, PartialView - единственное, что возвращается (при возврате он занимает всю страницу).Итак, я сделал это:

При нажатии кнопки savehours:

        $('#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 голосов
/ 09 декабря 2010

Я предполагаю, что вы используете структуру сущностей. Но я не видел никаких изменений в вашем контроллере. Попробуйте изменить код, например:

[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());
}
...