モデルを編集するときに、エンティティ「ProgramType」がドロップダウン リストに存在します。既存のコレクションに必要なものが表示されない場合、ユーザーは同じ編集画面でそのコレクションに新しいエントリを追加できる必要があります。
基本的に、同じエンティティが同じ編集ビューに 2 回存在する必要があるようです。ドロップダウン メニューで特定の値が選択されている場合、テキスト フィールドは jQuery の「表示」を実行して、新しいデータを追加できるようにします。
<div class="editor-label">
@Html.LabelFor(model => model.ProgramTypeId, "Program Type")
</div>
<div class="editor-field">
@Html.DropDownList("ProgramTypeId", "- Select a Program Type - ")
@Html.ValidationMessageFor(model => model.ProgramTypeId)
</div>
//this div is hidden via jQuery unless needed
<div class="editor-label hiddenDiv">
@Html.Label("New Program Type Title:")
</div>
<div class="editor-field hiddenDiv">
@Html.EditorFor(model => model.ProgramType.ProgramType)
@Html.ValidationMessageFor(model => model.ProgramType.ProgramType)
</div>
//
<div class="editor-label">
@Html.LabelFor(model => model.ProgramYear)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.ProgramYear)
@Html.ValidationMessageFor(model => model.ProgramYear)
</div>
これを達成するための最良の方法は何ですか?私は本当にフォーム コレクションを使用したいと思っていますが、それは「練習不足」のようです。
public class SurveyProgramModel
{
[Key]
public int ProgramId { get; set; }
[DisplayName("Year")]
public int ProgramYear { get; set; }
[DisplayName("Status")]
public int ProgramStatusId { get; set; }
[DisplayName("Program Title")]
public string ProgramTitle { get; set; }
public int ProgramTypeId { get; set; }
[DisplayName("Program Type")]
public virtual SurveyProgramTypeModel ProgramType { get; set; }
[DisplayName("Status")]
public virtual ProgramStatusModel ProgramStatusModel { get; set; }
public virtual ICollection<SurveyResponseModel> SurveyResponseModels { get; set; }
}
public class SurveyProgramTypeModel
{
[Key]
public int ProgramTypeId { get; set; }
[DisplayName("Program Type")]
public string ProgramType { get; set; }
}