3

フォームの POST 中に上記のエラーが発生しました。エラーの根本的な原因は、複数の SelectList が 2 回呼び出された "DropDownListFor" であると思います。はいの場合、解決策を提案してください。

「x=>x.Values」から「x=>x.Name」に変更すると、「キー「DDLView.Name」を持つタイプ「IEnumerable」の ViewData アイテムはありません」というエラーも表示されます。

エディタ テンプレート

@model DropDownListViewModel

@Html.LabelFor(x=>x.Values, Model.Label)
@Html.DropDownListFor(x=>x.Values, Model.Values)

モデルを見る

public class HomePageViewModel
{
    public DropDownListViewModel DDLView { get; set; }
}

public class DropDownListViewModel
{
    public string Label { get; set; }
    public string Name { get; set; }
    public SelectList Values { get; set; }
}

コントローラ

public ActionResult Index()
    {
        HomePageViewModel homePageViewModel = new HomePageViewModel();

        homePageViewModel.DDLView = new DropDownListViewModel
                                        {
                                            Label = "drop label1",
                                            Name = "DropDown1",
                                            Values = new SelectList(
                                                         new[]
                                                             {
                                                                 new {Value = "1", Text = "text 1"},
                                                                 new {Value = "2", Text = "text 2"},
                                                                 new {Value = "3", Text = "text 3"},
                                                             }, "Value", "Text", "2"
                                                         )
                                        };
}

[HttpPost]
    public ActionResult Index(HomePageViewModel model)
    {
        return View(model);
    }

意見

@model Dynamic.ViewModels.HomePageViewModel
@using (Html.BeginForm())
{
@Html.EditorFor(x=>x.DDLView)


<input type="submit" value="OK" />

}

4

1 に答える 1

3

問題は、SelectList にパラメーターなしのコンストラクターがなく、モデル バインダーがそれをインスタンス化できないことですが、それをポストバックしようとしています。

問題を解決するには、実装で 2 つのことを変更します。

1) エディタ テンプレートの変更

 @Html.DropDownListFor(x=>x.Values, Model.Values) 

 @Html.DropDownListFor(x=>x.ValueId, Model.Values) 

2) 元の DropDownListViewModel の隣に追加します

[ScaffoldColumn(false)]
public string ValueId { get; set; }

これで、ポスト アクション パラメータに正しい値が設定されます。

于 2012-07-11T22:04:22.663 に答える