MVC多选列表未显示默认值

时间:2015-10-06 15:18:36

标签: asp.net-mvc

现在已经在这个问题上工作了几个小时,也许我在这里错过了一些简单的东西,但无论我尝试什么,我都无法让默认的选定项目起作用。

控制器功能:

public ActionResult Edit(int? id)
{
    if (id == null)
    {
        return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
    }
    Room room = db.Rooms.Find(id);
    if (room == null)
    {
        return HttpNotFound();
    }
    List<int> allowedMods = new List<int> {1, 2};
    List<keyval> allMods = new List<keyval>
    {
        new keyval(1,"A"),
        new keyval(2,"B"),
        new keyval(3,"C")
    };
    MultiSelectList multiList = new MultiSelectList(allMods, "ID", "Name", allowedMods);
    ViewBag.mods = multiList;
    return View(room);
}

简单助手类keyval:

public class keyval
{
    public int ID { get; set; }
    public string Name { get; set; }

    public keyval() { }
    public keyval(int ID, string Name)
    {
        this.ID = ID;
        this.Name = Name;
    }
}

观点:

@model X.Models.Room

@using (Html.BeginForm())
{
    @Html.AntiForgeryToken()

    <div class="form-horizontal">
        <h4>Room</h4>
        <hr />
        @Html.ValidationSummary(true, "", new { @class = "text-danger" })
        @Html.HiddenFor(model => model.ID)

        <div class="form-group">
            @Html.Label("Moderators Allowed", htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.ListBox("mods", ViewBag.mods as MultiSelectList, new { @class = "form-control" })
            </div>
        </div>

        <div class="form-group">
            <div class="col-md-offset-2 col-md-10">
                <input type="submit" value="Save" class="btn btn-default" />
            </div>
        </div>
    </div>
}

<div>
    @Html.ActionLink("Back to List", "Index")
</div>

相关生成的Html:

<div class="col-md-10">
    <select class="form-control" id="mods" multiple="multiple" name="mods">
        <option value="1">A</option>
        <option value="2">B</option>
        <option value="3">C</option>
     </select>
</div>

我尝试了很多不同的版本,当我提交表单时,我会获得所选项目的新列表,但是默认值对我不起作用。

我真的很感激这个问题的帮助。

1 个答案:

答案 0 :(得分:3)

列表框的名称与保存列表的ViewBag属性的名称相同,ViewBag存在一个奇怪的错误,如果是这种情况,则导致无法正确呈现内容。尝试将ViewBag.mods更改为ViewBag.moderators或ViewBag.mods以外的其他内容。

使用您的代码进行测试,并为我纠正问题。