我有一个视图模型,其中包含许多属性,一个SelectList和一个子对象数组。

public class RoundViewModel
{
    public int RoundId { get; set; }
    public string RoundName { get; set; }
    public SelectList Teams { get; private set; }
    public List<GameViewModel> Games { get; set; }
}

public class GameViewModel
{
    public int HomeTeamId { get; set; }
    public int AwayTeamId { get; set; }
    public DateTime GameTimeGMT { get; set; }
}


每回合可以有不定数量的游戏,我试图将相同的Teams SelectList绑定到我在页面上放置的每个下拉列表中:

<% using (Html.BeginForm()) {%>

    <fieldset>
        <legend>Fields</legend>
        <%= Html.HiddenFor(model => model.CodeId) %>
        <div class="editor-label">
            <%= Html.LabelFor(model => model.RoundNumber) %>
        </div>
        <div class="editor-field">
            <%= Html.TextBoxFor(model => model.RoundNumber) %>
            <%= Html.ValidationMessageFor(model => model.RoundNumber) %>
        </div>

        <div class="editor-label">
            <%= Html.LabelFor(model => model.RoundName) %>
        </div>
        <div class="editor-field">
            <%= Html.TextBoxFor(model => model.RoundName) %>
            <%= Html.ValidationMessageFor(model => model.RoundName) %>
        </div>

        <%
        for (int i = 0; i < Model.Games.Count; i++)
        {
        %>
        <div class="editor-label">
            Game:
        </div>
        <div class="editor-field">
        <%= Html.DropDownList("Games[" + i + "].HomeTeamId", Model.Teams, "--No Game--", new { value = Model.Games[i].HomeTeamId })%> VS
        <%= Html.DropDownList("Games[" + i + "].AwayTeamId", Model.Teams, "--No Game--", new { value = Model.Games[i].AwayTeamId })%>

            <%= Html.TextBox("Games[" + i + "].GameTimeGMT", Model.Games[i].GameTimeGMT, new { Class = "calendar", value = Model.Games[i].GameTimeGMT })%>
        </div>
        <% } %>

        <p>
            <input type="submit" value="Save" />
        </p>
    </fieldset>

<% } %>


类似的视图对于Create操作也可以正常工作,但是我似乎无法在每个下拉列表中设置现有选择。您可以看到我为每个游戏明确设置了日期时间。

new { value = Model.Games[i].HomeTeamId }行在<select> html元素上设置了一个属性,但是显然这行不通。我曾考虑过设置另一个属性,并使用jQuery设置所选项目,但是与现有代码相比,它感觉更hacky。

我是MVC的新手,所以如果我做错了所有方法,我一定会非常感激。有人可以协助吗?

最佳答案

如果您看一下SelectList对象的构造函数,那么您会看到它采用IEnumerable对象列表作为其源和其他参数来设置数据和文本字段以及所选项目。

您的View模型是否有特定原因存储SelectList而不是说团队列表?那你就可以做

Html.DropDownList("Games[" + i + "].HomeTeamId",
    new SelectList(Model.Teams, Model.Games[i].HomeTeamId));

public class RoundViewModel
{
    ....
    public IList<TeamObject> Teams { get; private set; }

关于c# - 如何在ASP.NET MVC编辑页面中绑定(bind)多个下拉菜单?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2356178/

10-12 05:05