EF4.3将viewbag项链接到viewmodel

时间:2012-04-28 21:31:17

标签: entity-framework c#-4.0 razor 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项目是将被填充的选择列表。当我用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但是我想听听是否有修复而不必这样做(当然,除非我正在做的事情被认为是非常糟糕的做法)。

1 个答案:

答案 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")