1

ビューモデルの非表示フィールドのバインドを 更新します。

私の状況を説明してみましょう。私は完全に間違っているかもしれませんが、これが私に問題を引き起こしていると私が信じていることです.

私は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 として表示されます。

更新: 問題の根本原因複雑なオブジェクトは、隠しフィールドを使用してビューモデルにバインドできません。

任意の提案や考えをいただければ幸いです。

4

1 に答える 1