2

ビューの 1 つである SelectList を使用しようとしていますが、正しく入力されていません。適切な数のエントリ (4) を取得しますが、すべてSystem.Web.Mvc.SelectListItem. コードでデバッガーを起動すると、奇妙なことが起こっていることがわかりました。私は何か間違ったことをしているに違いありませんが、何が悪いのかよくわかりません。

ViewModel からのコード:

public SelectList DeviceTypes {get; private set;}
....
var device_types = DataTableHelpers.DeviceTypes(); 
IEnumerable<SelectListItem> sl = device_types.Select(
                      dt => new SelectListItem { Selected = (dt.DeviceType == 1),
                      Text = dt.Description, 
                      Value = dt.DeviceType.ToString() }).ToList();
DeviceTypes = new SelectList(sl);

ビューからのコード:

<%= Html.DropDownList("Type",Model.DeviceTypes) %>

したがって、デバッガーでこれを見ると、sl IEnumerable が正しくビルドされています。そこには 4 つの要素がすべて表示され、適切な Text プロパティと Value プロパティの値が示されています。ただし、SelectList コンストラクターを呼び出すと、そこに含まれる IEnumerable を展開すると、4 つのエントリがあることがわかりますが、それらのデータはすべて失われています。テキストは に設定されSystem.Web.Mvc.SelectListItem、値はnullです。

ToList()呼び出しを aに変更し、ToArray()完全に削除しようとしました。それは行動を変えませんでした。

ここで何が間違っていますか?

4

1 に答える 1

3

編集:私の最初の答えをスクラッチします。

コントローラーで Html アイテムを構築しようとするのではなく、アイテムの場合は IEnumerable リストをビューに渡す必要があります。

コントローラーのコード:

public IEnumberable<YourModel> DeviceTypes {get; internal set;}
....
DeviceTypes = DataTableHelpers.DeviceTypes();

ビューのコード:

<%= Html.DropDownList("Type", from dt in Model.DeviceTypes
                              select new SelectListItem
                              {
                                  Text = dt.Description,
                                  Value = dt.DeviceType.ToString(),
                                  Selected = dt.DeviceType == 1
                              }) %>
于 2010-01-17T18:25:34.450 に答える