似乎@Html.DropDownList无法使用Selected值设置进行渲染。我有一个例子:
@foreach (SelectListItem item in ViewBag.Agare as List<SelectListItem>)
{
<div>
Item: Name: @(item.Text) Value: @(item.Value) Selected: @(item.Selected)
</div>
}
<div class="editor-field">
@Html.DropDownList("Agare", ViewBag.Agare as List<SelectListItem>, new {@class = "chzn-select" })
</div>
结果是:
名称:演示游艇俱乐部价值:1选择:错误
姓名:Anders Jansson价值:100选中:错误
姓名:Per Kyrk价值:101选择:错误
姓名:Oskar Persson价值:102选中:真
名称:Pluten Snutten Value:204 Selected:False
第一个选项始终是默认值!
呈现的代码是:
<select class="chzn-select" id="Agare" name="Agare" required="required">
<option value="1">Demo Yacht Club</option>
<option value="100">Anders Jansson</option>
<option value="101">Per Kyrk</option>
<option value="102">Oskar Persson</option>
<option value="204">Pluten Snutten</option>
</select>
值得一提的是我也使用Choosen来设置DropDown的样式,但是如果我停止使用它也没关系。否则一切都很直接!
我的版本是: Visual Studio Express 2013 for Web。 MVC 5.0.0 Asp.Net Razor 3.0.0 Asp.Net Web API 5.0.0 Asp:net Web Pages 3.0.0 EF 6.0.1 选择0.12.0
任何想法?
答案 0 :(得分:2)
请尝试将DropDownList'Agare'的名称更改为与ViewBag属性不同。奇怪,我知道!
@Html.DropDownList("SomethingElse", ViewBag.Agare as List<SelectListItem>, new {@class = "chzn-select" })
答案 1 :(得分:0)
请勿使用ViewBag
。拥有更好的解决方案比仅仅解决问题更重要。如果您在互联网上搜索“ViewBag SelectListItem not working”,您可以找到很多,这就是我建议您使用VIewModel的原因。
是一个例子。
<强>视图模型强>
public class SportsViewModel
{
public string SelectedSports { get; set; }
public IEnumerable<SelectListItem> Sportses { get; set; }
}
<强>动作强>
public ActionResult Sport()
{
var model = new SportsViewModel();
//_sportses is a list for sports
// get selectedSprortsId value for dropdown selected item.
model.Sportses = _sportses.Select(m => new SelectListItem {Value = m.Id.ToString(), Text = m.Name, Selected = m.Id == selectedSprortsId});
return View(model);
}
查看
@model SportsViewModel
@foreach (var item in Model.Sportses)
{
<div>
Item: Name: @(item.Text) Value: @(item.Value) Selected: @(item.Selected)
</div>
}
<div class="editor-field">
@Html.DropDownList("SelectedSports", Model.Sportses, new { @class = "chzn-select" })
</div>
<强>更新强>
如果您无法更改为ViewModel
,则可以使用SelectList
,并将所有列表设置为ViewBag,如下所示:
var SelectListItemList = (from s in _sportses
select new SelectListItem
{
Text = s.Name,
Value = s.Id.ToString(),
}).ToList();
ViewBag.Agare = new SelectList(SelectListItemList , "Value", "Text", selectedSprortsId);
然后在您看来,您仍然可以删除现有代码“as List<SelectListItem>
”。
@foreach (SelectListItem item in ViewBag.Agares)
{
<div>
Item: Name: @(item.Text) Value: @(item.Value) Selected: @(item.Selected)
</div>
}
<div class="editor-field">
@Html.DropDownList("Agare", ViewBag.Agare as List<SelectListItem>, new { @class = "chzn-select" })
答案 2 :(得分:0)
更改了ViewBag属性的名称,现在它可以正常工作。
@Html.DropDownList("Agare", ViewBag.ListOfAgare as List<SelectListItem>, new { required = "required", @class = "chzn-select" })
为什么?