现在已经在这个问题上工作了几个小时,也许我在这里错过了一些简单的东西,但无论我尝试什么,我都无法让默认的选定项目起作用。
控制器功能:
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>
我尝试了很多不同的版本,当我提交表单时,我会获得所选项目的新列表,但是默认值对我不起作用。
我真的很感激这个问题的帮助。
答案 0 :(得分:3)
列表框的名称与保存列表的ViewBag属性的名称相同,ViewBag存在一个奇怪的错误,如果是这种情况,则导致无法正确呈现内容。尝试将ViewBag.mods更改为ViewBag.moderators或ViewBag.mods以外的其他内容。
使用您的代码进行测试,并为我纠正问题。