1

Razor ビュー エンジンを使用して、MVC4 アプリケーションでクライアント側の検証済みドロップダウン リストを作成しようとしています。

ドロップダウン リストを生成するビューのコードは次のとおりです。

 @Html.DropDownList("Test", new SelectList(ViewBag.AvailableLoBsDescriptions, ViewBag.AvailableLoBsIds), "--none--")

ViewBag.AvailableLoBsDescriptions は IList を使用してコントローラーで作成されますが、ViewBag.AvailableLoBsIds も IList を使用してコントローラーで作成されることに注意してください。

私が期待していたのは、Razor にドロップダウン メニューを生成させることです。このドロップダウン メニューでは、ID が value="..." を設定している間に、説明がそれぞれの内部 html を設定します。ただし、値に対しては何も生成されないため、次のようになります。

<select id="Test" name="Test"><option value="">--none--</option>
<option>N/A</option>
<option>aaaa</option>
<option>bbbb</option>
<option>cccc</option>
<option>dddd</option>
<option>eeee</option>
<option>ffff</option>
</select>

SelectList のドキュメント ( http://msdn.microsoft.com/en-us/library/system.web.mvc.selectlist%28v=vs.108%29.aspx ) を見ると、これは機能するはずです。プレースホルダー以外の値が生成されない理由を知っている人はいますか?

ありがとう!

4

1 に答える 1

1

使用しているコンストラクターは次のようになります。

SelectList(IEnumerable, Object)

ここでの 2 番目のパラメーターは、最初のパラメーターのコレクションから現在選択されているオブジェクトを指定します。値のリストとして使用するオブジェクトを指示するものではありません。

あなたがすべきことは、を使用することSelectList(IEnumerable, String, String)です。これにより、( の各要素の) プロパティの名前を渡してIEnumerable、説明と値に使用することができます。次に、次のようなものを生成できます。

コントローラ:

// Create your IEnumerable
var LoBs = new List<LoB>();

// Assign some parameters to your objects
var exampleItem = new LoB();
exampleItem.Description = "Option text";
exampleItem.Value = "myValue";

// Populate your list and return your view.
LoBs.Add(exampleItem);
ViewBag.LoBs = LoBs;
return View();

意見:

@Html.DropDownList("Test",
    new SelectList(ViewBag.LoBs, "Value", "Description"),
    "--none--")

出来上がり...

<select id="Test" name="Test">
    <option value="">--none--</option>
    <option value="myValue">Option text</option>
</select>
于 2013-04-05T19:07:08.393 に答える