0

MVC4 でドロップダウン リストを使用してエディター テンプレートを作成しようとしています。次のように、dropdownlistfor をビューで直接動作させることができます。

@Html.DropDownListFor(model => model.Item.OwnerId, new SelectList(Model.DDLOptions.CustomerOptions, "Value", "DisplayText"))

しかし、それを「生成」してエディターテンプレートに入れると、機能させることができません。

これが私の EditorTemplate パーシャルで試していることです:

@Html.DropDownListFor(model => model, new SelectList(Model.DDLOptions.CustomerOptions, "Value", "DisplayText"))

エラーが発生しています:

Exception Details: Microsoft.CSharp.RuntimeBinder.RuntimeBinderException: 'int' does not contain a definition for 'DDLOptions'

Model.DDLOptions.CustomerOptionsタイプはIEnumerable<DDLOptions<int>>:

public class DDLOptions<T>
{
    public T Value { get; set; }
    public string DisplayText { get; set; }
}

このエラーは、DDLOptions がジェネリックであることと関係がありますか?

4

1 に答える 1

1

この行が問題です:

@Html.DropDownListFor(model => model, new SelectList(Model.DDLOptions.CustomerOptions, "Value", "DisplayText"))

モデルは上記のコードに基づく単なる int ですがnew SelectList(Model.DDLOptions.CustomerOptions, "Value", "DisplayText")、エディター テンプレートのモデルには存在しない Model.DDLOptions を参照して、パーシャルも呼び出しています。あなたのモデルは単なるintです。

これを行うにはいくつかの方法があります。そのうちの 1 つは、アイテム所有者のカスタム モデル クラスを作成し、所有者 ID と DDLOptions を含めることです。もう 1 つは、DDLOptions を ViewBag に貼り付けることですが、よく書かれたビュー固有のビュー モデルを使用することを好むため、通常はこれを避けます。

これが役立つことを願っています。

于 2013-01-08T17:10:02.063 に答える