DropDownList의 값을 미리 선택하는 데 문제가 있습니다. 기본적으로 나중에 작성할 수없는 클래스의 isntance 및 DropDownList에서 선택할 수있는 모든 가능한 값을 캡슐화하는 ViewModel 클래스가 있습니다. 여기DropDownList의 미리 선택 값이 작동하지 않습니다.
모델 클래스 코드입니다 :
public abstract class Entity
{
public virtual int Id { get; set; }
}
public class Project : Entity
{
public virtual string Name { get; set; }
public virtual string Comments { get; set; }
public virtual IList<Activity> Activities { get; set; }
}
public class Activity : Entity
{
public virtual string Comments { get; set; }
public virtual Project Project { get; set; }
}
뷰 모델 :
public class ActivityViewModel
{
public Activity Instance { get; set; }
public IList<Project> AllProjects { get; set; }
}
보기 :
@model Desk.Mvc3.Models.ActivityViewModel
@{
ViewBag.Title = "Create";
}
<h2>Create</h2>
@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
<fieldset>
<legend>Activity</legend>
<p>
<input type="submit" value="Create" />
</p>
<div class="editor-label">
@Html.LabelFor(model => model.Instance.Comments)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Instance.Comments)
@Html.ValidationMessageFor(model => model.Instance.Comments)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.AllProjects)
</div>
<div class="editor-field">
@Html.DropDownListFor(model => model.Instance.Project,
new SelectList(Model.AllProjects, "Id", "Name", Model.Instance.Project.Id))
@Html.ValidationMessageFor(model => model.AllProjects)
</div>
<p>
<input type="submit" value="Create" />
</p>
</fieldset>
}
... 그리고 컨트롤러의 작업 :
,
브라우저 내부에 표시되는 경우 DropDownList가 프리젠 테이션 된 항목이 아닌 기본 프로젝트 항목으로 채워지는 이유는 무엇입니까? Action 메서드에서 할당 된 것)?
ID를 선택하면 선택한 프로젝트의 POST에 ModelBinding이 표시되지 않습니다. 그것도 좋지 않습니다. –
내 업데이트를 검토하십시오. "Project"클래스의 "ToString()"함수를 재정 의하여 접근 방식을 만드는 방법이 있습니다. –
제안서를 통해 항목을 미리 선택할 수있었습니다. 또 다른 것은 ModelBinding에 관한 것입니다. TypeConverter를 사용해야 할 것 같습니다. 어쨌든 고마워! –