MVC에서 매우 새롭기 때문에 저에게 곰이 필요하지만 SelectList의 값을 포스트 백 동안 선택한 객체의 인스턴스에 바인딩 할 수 없습니다. MVC 4.드롭 다운 목록에서 MVC 4의 모델 객체에 SelectedItem 바인딩
학교의 구성원으로서 교사를 만들어야한다고 가정 해 보겠습니다. I는 뷰 모델 클래스는 다음과 같은 정의 :
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>
}
그리고 마지막으로, 내 컨트롤러 방법 :
[HttpPost, ActionName("Create")]
public ActionResult CreateTeacher(RegisterTeacherModel teacherModel)
{
if (ModelState.IsValid)
{
try
{
...
}
}
}
하지만 뒤쪽에 RegisterTeacherModel 개체를받을 때 컨트롤러에서 내 Create 메서드, SelectedSchool 항상 null입니다. 모델 바인더가 포스트 백에서 객체 참조를 다시 만드는 방식으로 뭔가를 놓치고 있어야합니다. 누구든지 올바른 방향으로 나를 가리킬 수 있습니까?
작성 페이지에서 소스를 보는 경우 드롭 다운 목록의 ID는 무엇입니까? 그리고 가치는 무엇입니까? – Jonathan