未选择Asp MVC下拉列表选定值

时间:2015-07-08 14:08:24

标签: c# asp.net asp.net-mvc asp.net-mvc-4 razor

我有以下下拉列表,但所选的值似乎没有效果。它默认为列表中的第一项。

    private List<string> GetTransmissions()
    {
        List<string> Transmission = new List<string>();
        Transmission.Add("Automatic");
        Transmission.Add("Manual");


        return Transmission;
    }

     Car car = _repository.GetCarDetails(id);

     ViewBag.Transmission = new SelectList(GetTransmissions(), car.Transmission);

在我看来,我有:

    @Html.DropDownList("Transmission", (IEnumerable<SelectListItem>)ViewBag.Transmission, "Please Select", new { @class = "form-control" })

3 个答案:

答案 0 :(得分:2)

您需要区分包含列表的属性和包含所选值的属性。

我建议在视图中使用viewmodel:

public class CarViewModel
{

    public SelectList Transmissions
    {
        get
        {
            return new SelectList(new List<SelectListItem>{
                new SelectListItem {  Value = "Manual"},
                new SelectListItem {  Value = "Automatic"}
            });                
        }
    }

    public string Transmission { get; set; }

}

并使用this DropDownListFor版本

 @Html.DropDownListFor(model => model.Transmission,
    @Model.Transmissions, "Please Select", new { @class = "form-control" })

答案 1 :(得分:1)

如果您仅限于使用ViewBag而不是视图模型和@Html.DropDownList Html助手,那么我会执行以下操作:

        ViewBag.Transmissions = new SelectList(GetTransmissions()
        .Select(t => new {value = t, text = t}), 
            "value", "text");
        ViewBag.Transmission = car.Transmission;

上面创建SelectList,然后进行投影,以便您的下拉列表呈现文本和值。这保存在ViewBag.Transmissions中,这是可用的选项。

然后使用ViewBag.Transmission设置所选传输。

您的剃刀代码也需要更改为使用ViewBag.Transmissions

@Html.DropDownList("Transmission", 
      (IEnumerable<SelectListItem>)ViewBag.Transmissions, 
         "Please Select", new { @class = "form-control" })

Working Fiddle

答案 2 :(得分:-1)

通过更改

来管理修复
 ViewBag.Transmission = new SelectList(GetTransmissions(), car.Transmission);

 ViewBag.Transmissions = new SelectList(GetTransmissions(), car.Transmission);

Car模型已经包含一个名为Transmission的属性,因此需要另一个ViewBag来保存此属性。

在我的剃刀代码中使用以下代码

  @Html.DropDownList("Transmission", (IEnumerable<SelectListItem>)ViewBag.Transmissions, "Please Select", new { @class = "form-control" })