首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Asp MVC下拉列表中未选定的值

Asp MVC下拉列表中未选定的值
EN

Stack Overflow用户
提问于 2015-07-08 14:08:24
回答 3查看 4K关注 0票数 2

我有下面的下拉列表,但是所选的值似乎不起作用。默认为列表中的第一项。

代码语言:javascript
复制
    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);

在我看来,我有:

代码语言:javascript
复制
    @Html.DropDownList("Transmission", (IEnumerable<SelectListItem>)ViewBag.Transmission, "Please Select", new { @class = "form-control" })
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-07-09 07:54:34

通过改变

代码语言:javascript
复制
 ViewBag.Transmission = new SelectList(GetTransmissions(), car.Transmission);

代码语言:javascript
复制
 ViewBag.Transmissions = new SelectList(GetTransmissions(), car.Transmission);

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

在“我的剃须刀”代码中,请使用以下代码

代码语言:javascript
复制
  @Html.DropDownList("Transmission", (IEnumerable<SelectListItem>)ViewBag.Transmissions, "Please Select", new { @class = "form-control" })
票数 -1
EN

Stack Overflow用户

发布于 2015-07-08 14:40:11

您需要区分保存列表的属性和保存所选值的属性。

我建议对视图使用一个视图模型,如下所示:

代码语言:javascript
复制
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; }

}

并使用 DropDownListFor版本

代码语言:javascript
复制
 @Html.DropDownListFor(model => model.Transmission,
    @Model.Transmissions, "Please Select", new { @class = "form-control" })
票数 2
EN

Stack Overflow用户

发布于 2015-07-08 14:34:49

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

代码语言:javascript
复制
        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

代码语言:javascript
复制
@Html.DropDownList("Transmission", 
      (IEnumerable<SelectListItem>)ViewBag.Transmissions, 
         "Please Select", new { @class = "form-control" })

工频

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31295193

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档