ビューモデルの非表示フィールドのバインドを 更新します。
私の状況を説明してみましょう。私は完全に間違っているかもしれませんが、これが私に問題を引き起こしていると私が信じていることです.
私は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」のフォームを作成しました。ただし、フォーム投稿アクションでは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 を null として取得していますが、フォームの非表示フィールドとして提供しています。
考えられる問題HTTPPOST アクションが発生すると、ビューはProjectCreateViewModelの新しいインスタンスを作成し、CourseVM を null としてインスタンス化問題はProjectCreateViewModelのコンストラクタにあると思います。次に、同じインスタンスが HTTPPOST メソッドに渡され、CourseVM が null として表示されます。
更新: 問題の根本原因複雑なオブジェクトは、隠しフィールドを使用してビューモデルにバインドできません。
任意の提案や考えをいただければ幸いです。