@ Html.DropDownList在Selected = true时失败

时间:2013-12-13 12:27:24

标签: html asp.net asp.net-mvc

似乎@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

任何想法?

3 个答案:

答案 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" })

为什么?