뷰 모델의 바인딩 숨겨진 필드를 업데이트합니다 .
제 상황을 설명해 드리겠습니다. 내가 완전히 틀렸을 수도 있지만 이것이 나에게 문제를 일으키는 것이라고 생각합니다.
ViewModel 프로젝트 가 있습니다.
뷰 모델 만들기
[Bind(Exclude="List")]
public class ProjectCreateViewModel : ProjectViewModelBase
{
public CourseViewModelBase CourseVM { get; set; }
public ProjectCreateViewModel()
: base()
{
this.CourseVM = new CourseViewModelBase();
}
}
Project View Model Base 는 프로젝트 의 기본 viewModel이며 관련된 모든 작업이 여기에서 파생되므로 속성 이름을 반복해서 쓸 필요가 없습니다.
Create View Model Base 는 ProjectViewModelBase (ProjectController에서 처리 또는 사용)와 유사하지만 코스 (CourseController에서 처리) 용입니다.
이제 ProjectCreateViewModel 을 사용하는 "Create New Project" 양식을 만들었습니다 . 그러나 Form post action에서는 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
}
ProjectController
[HttpGet]
public ActionResult CreateNewProject(CourseViewModelBase courseVM = null)
{
ProjectCreateViewModel projectCreateViewModel = new ProjectCreateViewModel
{
CourseVM = courseVM,
};
// OTHER STUFF
return View("CreateNewProject", projectCreateViewModel);
}
HTTPPOST 작업에서 오류가 발생했습니다 . CourseVM을 양식의 숨겨진 필드로 제공했지만 CourseVM이 null로 표시됩니다.
가능한 문제 나는HTTPPOST 작업이 발생할 때 View가 ProjectCreateViewModel의 새 인스턴스를 만들고CourseVM을 null로 인스턴스화하려고 할 때 ProjectCreateViewModel 의 생성자에 문제가있습니다. 그런 다음 CourseVM이 null로 표시되는 HTTPPOST 메서드에 동일한 인스턴스가 전달됩니다.
업데이트 : 문제 루트 원인 복잡한 개체는 숨겨진 필드를 사용하여 뷰 모델에 바인딩 할 수 없습니다.
어떤 제안이나 생각이라도 감사합니다.
당신은 필요하지 않습니다 HiddenFor
의 CourseVM
. MVC는 바인딩하기 때문에 자동으로 클래스를 생성합니다.CourseVM.CourseNumberRoot
현재 CourseVM
MVC가 할 수없는 숨겨진 입력에서 복잡한 객체 인 바인딩을 시도하고 있으므로 null을 반환합니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다