我的锦标赛控制器中有以下操作方法:
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项目是将被填充的选择列表。当我用firebug检查页面时,ViewBag.SportID
的SelectList的名称是SportID
,这正是我所期望的。但我希望在那里选择的值在我的viewModel中的SportID
属性的Tournament
属性中输入。所以名称应为Tournament.SportID
。
我不明白我是如何实现这一点的,我无法像这样在Razor中更改SelectList的名称:
<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但是我想听听是否有修复而不必这样做(当然,除非我正在做的事情被认为是非常糟糕的做法)。
答案 0 :(得分:1)
你试过吗
@Html.DropDownListFor(m => m.Tournament.SportID, ViewBag.SportID, "Select a sport")
(如果您需要Tournament.SportId的实际值,例如,您可以查看SelectList的不同构造函数并在“ViewBag创建”中更改它)
更正:
SelectList sportList = ViewBag.SportID;
@Html.DropDownListFor(m => m.Tournament.SportID, sportList, "Select a sport")