编辑模型时,下拉列表中存在实体“ProgramType”。如果用户在现有集合中看不到他们需要什么,他们需要能够在同一编辑屏幕上向该集合添加新条目。
基本上,似乎我需要在同一编辑视图中存在两次相同的实体。如果为下拉菜单选择了特定值,则文本字段会执行jQuery“show”以允许它们添加新数据。
<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; }
}
答案 0 :(得分:1)
一种方法是修改您的视图模型以包含例如。
public IEnumerable<SelectListItem> ProgramTypes { get; set; }
public int SelectedProgramType { get; set; }
public string NewProgramType { get; set; }
在您的控制器操作中,使用持久层中可能值的列表填充ProgramTypes,再加上额外值“Add new ...”。
在您的视图中,您可以将下拉列表呈现为
@Html.DropDownListFor(m => m.SelectedProgramType, Model.ProgramTypes)
然后添加一些jQuery以根据所选值显示和隐藏<div>
。在此<div>
添加
@Html.EditorFor(m => m.NewProgramType)
在[HttpPost]
操作方法中添加逻辑以确定它们是否正在添加新值,然后将新值保存到持久层。