6

次のコードがあります

public class TestModel
{
   public int TestId1 { get; set; }
   public int TestId2 { get; set; }
   public int TestId3 { get; set; }
   public List<TestSubModel> SubMods { get; set; }

   public IEnumerable<SelectListItem> SelectListItems { get; set; }
}

public class TestSubModel
{
   public string ItemId { get; set; }
}

public class HomeController : Controller
{
   public ActionResult Index()
   {
      var m = new TestModel
      {
         TestId1 = 1,
         TestId2 = 2,
         TestId3 = 3,
         SelectListItems = new List<SelectListItem> { 
                         new SelectListItem { Value = "1", Text = "Item 1" },
                         new SelectListItem { Value = "2", Text = "Item 2" },
                         new SelectListItem { Value = "3", Text = "Item 3" }
                      },
         SubMods = new List<TestSubModel> { 
                         new TestSubModel { ItemId = "1" },
                         new TestSubModel { ItemId = "2" },
                         new TestSubModel { ItemId = "3" }
                      }
      };
      return View(m);
   }
}

そしてビュー:

@model MvcApplication2.Controllers.TestModel

@using (Html.BeginForm())
{
   <ul>
      <li>Test1 Value @Model.TestId1 : @Html.DropDownListFor(i => i.TestId1, Model.SelectListItems)</li>
      <li>Test2 Value @Model.TestId2 : @Html.DropDownListFor(i => i.TestId2, Model.SelectListItems)</li>
      <li>Test3 Value @Model.TestId3 : @Html.DropDownListFor(i => i.TestId3, Model.SelectListItems)</li>
      <li></li>
      @for (var index = 0; index < Model.SubMods.Count(); index++)
      {
         <li>SubModel @index: value @Model.SubMods[index].ItemId
                      @Html.DropDownListFor(i => i.SubMods[index].ItemId, Model.SelectListItems)</li>
      }
   </ul>
}

出力は次のとおりです。

結果

私が期待しているのは、アイテム 1、アイテム 2、アイテム 3 が 2 回選択されていることです。Razor が for ループで正しい項目を選択しないのはなぜですか?

これも機能しません:

@Html.DropDownListFor(i => i.SubMods[index].ItemId, 
                      new SelectList(Model.SelectListItems, "Value", "Text"))

しかし、これは:

@Html.DropDownListFor(i => i.SubMods[index].ItemId, 
                      new SelectList(Model.SelectListItems, "Value", "Text", Model.SubMods[index].ItemId))

毎回新しい選択リストを作成したくありません。これはバグですか、それとも何か不足していますか?

2010年からこの質問を見ましたが、答えはありませんでした。

4

0 に答える 0