У меня есть приложение для составления расписания, где 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 вместо этого.Я не знаю, будет ли это работать лучше, но это моя единственная идея на данный момент.Или я что-то здесь не так делаю?Разве можно сделать то, что я пытался сделать, только я делаю это неправильно?