1

BasicInfoModel に関連付けられた partialView _BasicInfoPartView があります。このパーシャルビューには、次のような入力とドロップダウンリストが含まれています。

public class BasicInfoModel 
{       public string Name { get; set; }
        public string selectedRubric { get; set; }
        public IEnumerable<SelectListItem> Rubrics { get; set; }
}

部分的な _BasicInfoPartView.cshtml

@model ProjectZeroWebSite.Models.PleGroupModel
@Html.ListBoxFor(m => m.selectedRubric, @Model.Rubrics })
@Html.TextBoxFor(m => m.Name )

このパーシャルビューは、任意のページの FORM で呼び出すことができます。ページモデルに BasicInfoModel を追加するだけです。

public class RandomPageModel
{
        public basicInfoModel { get; set; }
        public string info2{ get; set; }
        ...
        public RandomPageModel()
        { this.basicInfoModel = new basicInfoModel ();}
}

RandomPage.cshtml

@using (Html.BeginForm())
{
    @Html.Partial("_BasicInfoPartView ", @Model.BasicInfoModel)
    @Html.TextBoxFor(m => m.info2)
    ...
    <input type="submit"  />
}

問題は、問題なくページにデータを入力できることです。しかし、モデルからコントローラーの情報を取得しようとすると、次のようになります。 RandomPageModel.info2 OK! RandomPageModel.BasicInfoModel が空です...

私はデータバインディングの概念を理解していないと思います:s小さなJS関数によってページをオーバーロードしたくなかったので、これを試してみました.フォームをコピーするという考えは好きではありません(コードメンテナンス)。

事前に感謝します。

カンティーノ。

4

1 に答える 1

4

この場合、部分ビューの代わりにエディターテンプレートを使用する必要があります。

したがって、editorTemplate(強く型付けされた)を定義します

@model BasicInfoModel

@Html.ListBoxFor(m => m.selectedRubric, @Model.Rubrics })
@Html.TextBoxFor(m => m.Name )

このエディターテンプレートにモデルと同じ名前を付け、共有ビューフォルダーのEditorTemplatesというフォルダーに配置します。

〜/ Views / Shared / EditorTemplates / BasicInfoModel.cshtml

そして、この行を交換します

@Html.Partial("_BasicInfoPartView ", @Model.BasicInfoModel)

これのために

@Html.EditorFor(m => m.BasicInfoModel)
于 2013-03-12T17:01:59.757 に答える