2012-04-28 47 views
1

我在比赛控制器以下操作方法:EF4.3链接viewbag项目视图模型

public ActionResult Edit(int id) { 
     EditTournamentViewModel viewModel = new EditTournamentViewModel { 
      Tournament = _tournamentService.GetTournamentByID(id), 
      TournamentDivisions = _divisionService.GetTournamentDivisions(id).ToList() 
     }; 

     ViewBag.SportID = new SelectList(_sportService.GetSports(), "SportID", "Name"); 
     ViewBag.CountryID = new SelectList(_countryService.GetCountries(), "CountryID", "Name"); 

     return View(viewModel); 
    } 

两个viewbag项目选择列表将被填满。当我用萤火虫检查页面时,ViewBag.SportID的SelectList的名称是SportID,这正是我所期望的。但我希望在那里选择的值在我的viewModel中的Tournament属性的SportID属性中输入。所以名字应该是Tournament.SportID

我不明白我怎么能做到这一点,我是不是能够在剃刀改变选择列表的名称是这样的:

 <div class="editor-field"> 
      @Html.DropDownList("SportID", "Select a sport", new { name = "Tournament.SportID" }) 
      @Html.ValidationMessageFor(t => t.Tournament.Sport) 
     </div> 

这是代码,我有我的观点:

 <div class="editor-field"> 
      @Html.DropDownList("SportID", "Select a sport") 
      @Html.ValidationMessageFor(t => t.Tournament.Sport) 
     </div> 

我可以采取的解决方案,而不是在我的viewmodel有Tournament属性,我可以复制各个属性,然后使用automapper,但我想听听是否有修复程序,而不必这样做(除非当然,我正在做的事情被认为是非常糟糕的p ractice)。

回答

1

你尝试

@Html.DropDownListFor(m => m.Tournament.SportID, ViewBag.SportID, "Select a sport") 

(如果你需要Tournament.SportId的acual值,更新,例如,你可以看的SelectList的不同构造函数和改变它在你的“ViewBag创作”)

更正:

SelectList sportList = ViewBag.SportID; 

@Html.DropDownListFor(m => m.Tournament.SportID, sportList, "Select a sport") 
+0

如果我尝试它告诉我'CS1973:“System.Web.Mvc.HtmlHelper ”中有一个名为没有适用的方法“DropDownListFor”,但似乎有这个名字的扩展方法。扩展方法不能动态分派。考虑转换动态参数或调用扩展方法,而不使用扩展方法语法。' – Mekswoll 2012-04-28 22:04:30

+0

对,忘记了,你应该静态地重新声明你的ViewBag值。看看更正 – 2012-04-28 22:08:57

+0

JUP,就像一个魅力,thx。 :-) – Mekswoll 2012-04-28 22:13:01

相关问题