私は MVC を初めて使用するので、ご容赦ください。ただし、MVC 4 でのポストバック中に、SelectList の値を選択したオブジェクトのインスタンスにバインドできないようです。
School のメンバーとして Teacher を作成する必要があるとします。次のように定義された ViewModel クラスがあります。
public class RegisterTeacherModel
{
[Required]
[Display(Name = "User name")]
public string UserName { get; set; }
[Required]
[DataType(DataType.EmailAddress)]
[Display(Name = "Email address")]
public string Email { get; set; }
[Required]
[Display(Name = "School")]
public School SelectedSchool { get; set; }
[ScaffoldColumn(false)]
public Guid UserId
{
get;
set;
}
public SelectList PossibleSchools
{
get;
private set;
}
public RegisterTeacherModel(IRepository<School> schoolRepo)
{
PossibleSchools = new SelectList(schoolRepo, "Id", "Name");
}
}
そして私の見解:
@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
<fieldset>
<legend>RegisterTeacherModel</legend>
<div class="editor-label">
@Html.LabelFor(model => model.UserName)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.Email)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Email)
@Html.ValidationMessageFor(model => model.Email)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.SelectedSchool)
</div>
<div class="editor-field">
@Html.DropDownListFor(model => model.SelectedSchool, Model.PossibleSchools)
</div>
<p>
<input type="submit" value="Create" />
</p>
</fieldset>
}
そして最後に、私の Controller メソッド:
[HttpPost, ActionName("Create")]
public ActionResult CreateTeacher(RegisterTeacherModel teacherModel)
{
if (ModelState.IsValid)
{
try
{
...
}
}
}
しかし、Controller の Create メソッドで RegisterTeacherModel オブジェクトを受け取ると、SelectedSchool は常に null です。モデル バインダーがポストバック時にオブジェクト参照を再作成する方法に何か欠けているに違いありません。誰かが私を正しい方向に向けることができますか?