Обновить Связывание скрытых полей модели представления.
Попробую объяснить мою ситуацию. Я могу быть совершенно неправ, но это то, что, по моему мнению, вызывает у меня проблемы.
У меня есть ViewModel
Project Create View Model
[Bind(Exclude="List")]
public class ProjectCreateViewModel : ProjectViewModelBase
{
public CourseViewModelBase CourseVM { get; set; }
public ProjectCreateViewModel()
: base()
{
this.CourseVM = new CourseViewModelBase();
}
}
База модели представления проекта — это базовая модель представления для проекта, и все связанные с ней действия вытекают из нее, поэтому мне не нужно снова и снова писать имена свойств.
Создать базу модели представления аналогично ProjectViewModelBase (обрабатывается или используется ProjectController), но для курса (обрабатывается CourseController).
Теперь я создал форму для Создать новый проект, в которой используется ProjectCreateViewModel. Однако в действии отправки формы CourseVM всегда имеет значение null.
Создать новый проект .cshtml
@model LMSPriorTool.ViewModels.ProjectCreateViewModel
@* --- labels and other stuff -- *@
@using (Html.BeginForm("CreateNewProject", "Project",
FormMethod.Post, new { @class = "form-horizontal",
name = "createNewProjectForm" }))
{
<!-- Hidden Fields -->
@Html.HiddenFor( x => x.ProjectId)
@Html.HiddenFor( x => x.CourseVM) // CourseVM is null in post action
@Html.TextBoxFor(x => x.CourseVM.CourseNumberRoot) // This is displayed properly
}
Контроллер проекта
[HttpGet]
public ActionResult CreateNewProject(CourseViewModelBase courseVM = null)
{
ProjectCreateViewModel projectCreateViewModel = new ProjectCreateViewModel
{
CourseVM = courseVM,
};
// OTHER STUFF
return View("CreateNewProject", projectCreateViewModel);
}
Ошибка В действии HTTPPOST я получаю CourseVM как null, хотя я предоставил его как скрытое поле в форме.
Возможная проблема Я полагаю, что проблема связана с конструктором ProjectCreateViewModel, так как при выполнении действия HTTPPOST представление попытается создать новый экземпляр ProjectCreateViewModel и создайте экземпляр CourseVM как null. Затем тот же экземпляр передается методу HTTPPOST, в котором CourseVM отображается как null.
ОБНОВЛЕНИЕ: ПРИЧИНА ПРОБЛЕМЫ Сложные объекты нельзя привязать к модели представления с помощью скрытых полей.
Любые предложения или мысли приветствуются.