4

関数を使用してドロップダウン リストを作成しようとしDropdownListForていますが、その中で値を選択したいと考えています。

私はたくさん検索して、SelectListオブジェクトをに持つという同様の種類の解決策を見つけましたViewModel。このようなものを試しました

私はこのようなViewModelタイプのプロパティを使用しましたSelectList

SelectList HoursToSelect = new SelectList(MyDictionaryObject, "Value", "Key", 14/*selected value*/);

そして、私はこのように使用していました

@Html.DropDownListFor(m => m.EndsOnHour, HoursToSelect)

これはすべて正常に機能し、私の要件を完全に満たしていました

しかし、問題は私のプロジェクトのアーキテクチャが原因であり、私のプロジェクトではSelectListオブジェクトを使用できないためViewModelViewModel.

したがって、私に残された唯一の方法は、ビューのみに何かを配置することです。

 @Html.DropDownListFor(m => m.EndsOnHour, new SelectList(Model.Hours, "Value", "Key"))

でも何だかわからない!これを達成するためのアイデアはありますか?

4

2 に答える 2

4

オブジェクトのプロパティで使用する@Html.DropDownListFor(...)と、オブジェクトの現在の状態を使用して、選択した項目が設定されます。したがって、あなたの例では、選択リストで値を指定しない場合、の値を使用してm.EndsOnHour選択した値を設定します。実際には、選択リストは言うまでもなく、ドキュメントでわかるようにSelectListのコレクションである必要があります。SelectListItem

ただし、シリアル化の問題はまだ存在します。ここにはいくつかのオプションがありますが、可能であれば、ビュー側で値をスローするのが最も簡単です。多くのドロップダウン リストは、たとえば州や国を一覧表示するなど、列挙の可能な選択肢を表示するための静的な選択肢用に作成されています。他の一般的な例は、日付範囲などです。これらのインスタンスでは、それらのリストを生成してビューで呼び出すヘルパーを作成し、ビュー モデルからそれらを削除することができます。

ただし、リストが動的である場合、これは長期的にはうまく機能せず、システムのメンテナンスに悪影響を及ぼす余分な結合を引き起こす可能性があります。この場合、シリアライズ可能な独自のSelectList子クラスを作成し、それをシリアライズ可能な実装のジェネリック型パラメータとして使用する必要がありますIEnumerable<T>。C# の配列はシリアライズ可能であるため、その部分は処理されます。

于 2012-01-20T01:36:35.117 に答える
3

個人的には、DropDownListFor をあきらめて、このようなことをしました.... はるかに簡単です。これが良い考えではない理由があるかどうかはわかりません。

<select id="details-title">
@foreach (var title in Helper.Titles)
{
<option value="@title.Value" @(title.Value==Model.SelectedTitle?"selected=\"selected\" ":"")>@title.Text</option>
}
</select>
于 2012-04-04T16:34:52.230 に答える