2

私は次のモデルを持っています:

public class MyModel {
    public int SelectedItemId { get; set; }
    public SelectList PossibleItemsList { get; set; }
};

私のコントローラーでは、次のことを行います。

 var possibleItems = someSource.Select( item => new SelectListItem
                                          {
                                             Text = item.FirstMember,
                                             Value = item.SecondMember
                                          }).AsEnumerable();
 var model = new MyModel();
 model.SelectedItemId = somevalue;
 model.PossibleItemsList = new SelectList(possibleItems, model.SelectedItemId);
 return View( model );

私の見解では、次のコードがあります。

@Html.DropDownList("SelectedItemId ", Model.PossibleItemsList )

コードが実行されると、コントローラーコードは正常に動作するように見えますが、ビューにはドロップダウンがあり、すべてのアイテムに「System.Web.Mvc.SelectListItem」テキストが含まれています。

私は何を間違っていますか?

4

1 に答える 1

4

使用しているコンストラクターは、最初の引数をリストに表示する必要があるオブジェクトのリストとして扱い、ToStringそれぞれを呼び出して、対応するリスト項目のテキストと値の両方を取得します。これらのオブジェクトがたまたまSelectListItemインスタンスである場合、違いはなく、同じように扱われます。SelectListItem.ToStringは定義されておらず、型の文字列表現である基本的な実装を呼び出します。のリストが表示されているのはそのためです"System.Web.Mvc.SelectListItem"

あなたの状況では、列挙可能なSelectListItemオブジェクトを構築する必要はありません。別のコンストラクターを使用するだけですSelectList:

 var model = new MyModel();
 model.SelectedItemId = somevalue;
 model.PossibleItemsList = new SelectList(
     someSource, "FirstMember", "SecondMember", model.SelectedItemId);
 return View(model);
于 2013-07-25T12:57:48.533 に答える