更新视图模型的绑定隐藏字段。
让我试着解释一下我的情况。我可能完全错了,但这是我认为给我带来问题的原因。
我有一个 ViewModel
项目创建视图模型
[Bind(Exclude="List")]
public class ProjectCreateViewModel : ProjectViewModelBase
{
public CourseViewModelBase CourseVM { get; set; }
public ProjectCreateViewModel()
: base()
{
this.CourseVM = new CourseViewModelBase();
}
}
项目视图模型库是项目的基础视图模型,所有关联的操作都由此派生,因此我不需要一次又一次地编写属性名称。
Create View Model Base类似于 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 显示为空。
更新:问题根源无法使用隐藏字段将复杂对象绑定到视图模型。
任何建议或想法表示赞赏。