0

编辑模型时,下拉列表中存在实体“ProgramType”。如果用户在现有集合中没有看到他们需要的内容,他们需要能够在同一编辑屏幕上向该集合添加新条目。

从本质上讲,我似乎需要同一个实体在同一个编辑视图中存在两次。如果为下拉菜单选择了特定值,则文本字段会执行 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; }


    }
4

1 回答 1

1

一种方法是修改您的视图模型以包含例如

public IEnumerable<SelectListItem> ProgramTypes { get; set; }
public int SelectedProgramType { get; set; }
public string NewProgramType { get; set; }

在您的控制器操作中,使用持久层中的可能值列表填充 ProgramTypes,以及“添加新...”的额外值。

在您看来,您可以将下拉列表呈现为

@Html.DropDownListFor(m => m.SelectedProgramType, Model.ProgramTypes)

然后添加一些 jQuery 来显示和隐藏<div>基于所选值的 a。在这个<div>添加里面

@Html.EditorFor(m => m.NewProgramType)

并在您的[HttpPost]操作方法中添加逻辑以确定它们是否正在添加新值,然后将新值保存到您的持久层。

于 2012-07-06T15:51:51.470 回答