0

リスト項目を返すメソッドがあります。このアイテムを DropDownList に入力しようとすると、問題が発生します。毎回 null 例外が発生します。キャッチはどこですか?

方法:

public IEnumerable<SelectListItem> GetItems()
    {
        List<SelectListItem> list = new List<SelectListItem>();

        list.Add(new SelectListItem { Text = "Ptuj", Value = "1" });
        list.Add(new SelectListItem { Text = "Celje", Value = "2" });
        list.Add(new SelectListItem { Text = "Laško", Value = "3" });
        list.Add(new SelectListItem { Text = "Maribor", Value = "4" });
        list.Add(new SelectListItem { Text = "Ljubljana", Value = "5" });
        list.Add(new SelectListItem { Text = "N/A", Value = "6" });


        foreach (SelectListItem item in list)
        {
            yield return item;
        }
    }

意見:

@Html.LabelFor(model => model.PlaceOfBirth)
        @Html.DropDownListFor(model => model.PlaceOfBirth, //Exception thrown in this line
        Model.GetItems())
4

2 に答える 2

0

そのリストを SelectList に変更します。すでに SelectListItems を使用しているので、独り占めして SelectList を使用することもできます。

次に、SelectList を返すだけです。SelectList クラスがそのインターフェイスを実装しているため、署名の戻り値の型を IEnumerable のままにしておくことができます (とにかく、親は実装しています)。

例を挙げて詳しく説明しましょう。ここにモデルがあります:

public class AModel
{
    public IEnumerable<SelectListItem> places { get; set; }
    public int SelectedValue { get; set; }
}

インデックス アクション メソッドは次のとおりです。

public ActionResult Index()
{
    ViewBag.Message = "Welcome to ASP.NET MVC!";

    AModel model = new AModel{ places = GetItems(), SelectedValue = 0 };

    return View(model);
}

そして、これが新しい GetItems メソッドです。

public IEnumerable<SelectListItem> GetItems()
{
    List<SelectListItem> list = new List<SelectListItem>();

    list.Add(new SelectListItem { Text = "Ptuj", Value = "1" });
    list.Add(new SelectListItem { Text = "Celje", Value = "2" });
    list.Add(new SelectListItem { Text = "Laško", Value = "3" });
    list.Add(new SelectListItem { Text = "Maribor", Value = "4" });
    list.Add(new SelectListItem { Text = "Ljubljana", Value = "5" });
    list.Add(new SelectListItem { Text = "N/A", Value = "6" });

    SelectList thelist = new SelectList(list, "Value", "Text");

    return thelist;
}

あなたがそれをどうやって行くか見てください。

編集 (ビューを追加) :

  @model AModel

  @{
      ViewBag.Title = "Index";
  }

  <h2>Example</h2>

  Here are the places: @Html.DropDownListFor(m => m.SelectedValue, (SelectList)Model.Places, "Select a place")
于 2013-04-07T01:10:23.623 に答える