1

我的锦标赛控制器中有以下操作方法:

    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 检查页面时, SelectList 的名称为ViewBag.SportIDis SportID,这是我所期望的。但我希望将在那里选择的值输入到我的 viewModelSportID的属性中。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>

我可以采取的解决方案不是Tournament在我的视图模型中拥有一个属性,而是可以复制各个属性,然后使用自动映射器,但我想知道是否有修复而不必这样做(当然,除非我在做什么被认为是非常糟糕的做法)。

4

1 回答 1

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")
于 2012-04-28T21:53:42.970 回答