0

モデルを編集するときに、エンティティ「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; }


    }
4

1 に答える 1

1

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)

<div>次に、選択した値に基づいてa を表示および非表示にする jQuery を追加します。この<div>追加の中に

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

そして、[HttpPost]アクション メソッドにロジックを追加して、新しい値を追加するかどうかを判断し、新しい値を永続化レイヤーに保存します。

于 2012-07-06T15:51:51.470 に答える