【问题标题】:Set the selected item in dropdownlist in MVC3在 MVC3 的下拉列表中设置所选项目
【发布时间】:2014-05-10 09:32:03
【问题描述】:

我必须为视图中的下拉列表设置所选项目。但它不起作用。

//查看

<div class="editor-label">
            @Html.LabelFor(model => model.Gender)
        </div>
        <div class="editor-field">
           @Html.DropDownListFor(model => model.Gender,Model.GenderList)
        </div>

//型号

[Required(ErrorMessage = "Please select gender!")]
        [Display(Name = "Gender")]
        public string Gender { get; set; }

  public IEnumerable<SelectListItem> GenderList
        {
            get
            {
                return new[]
            {
                new SelectListItem { Value = "0", Text = "Select" },
                new SelectListItem { Value = "1", Text = "Male" },
                new SelectListItem { Value = "2", Text = "Female" },
            };
            }
        }

性别属性具有需要在列表中选择的值。还是不行。

我哪里错了?

【问题讨论】:

  • 向我们展示设置 Model.Gender 值的 Get 操作
  • 您在性别中输入“1”还是“男性”?应该是号码。此外,您不应该选择列表中的项目。您应该改用 DropDownListFor 的参数,该参数允许您设置未选择的文本。
  • @ErikFunkenbusch:是的,我正在尝试分配文本。现在它工作正常。谢谢。

标签: c# asp.net-mvc-3 razor selecteditem html.dropdownlistfor


【解决方案1】:

首先,创建您的 ViewModel。

public class MovieViewModel
{
    public string Genre { get; set; }

    public IEnumerable<SelectListItem> GenreList
    {
        get
        {
            yield return new SelectListItem { Text = "Comedy", Value = "1" };
            yield return new SelectListItem { Text = "Drama", Value = "2" };
            yield return new SelectListItem { Text = "Documentary", Value = "3" };
        }
    }
}

然后,您的控制器创建此 ViewModel 的新实例并将其发送到视图。

public class HomeController : Controller
{
    //
    // GET: /Home/
    public ActionResult Index()
    {
        var viewModel = new MovieViewModel
        {
            Genre = "2"
        };

        return View(viewModel);
    }
}

最后,视图使用 ASP.NET 包装器 [Html.DropDownListFor()][1] 显示下拉列表。

@model MvcApplication1.Models.MovieViewModel

<!DOCTYPE html>

<html>
<head>
    <title>My movie</title>
</head>
<body>
    <div>
        @Html.DropDownListFor(m => m.Genre, Model.GenreList)
    </div>
</body>
</html>

然后根据 ViewModel 自动选择所选值。无需手动设置对象SelectListitemSelected属性。

【讨论】:

    【解决方案2】:

    SelectListItem 类型有一个Selected 属性,您需要将true 设置为您希望设置为选中的项目。

    你可以像下面这样静态设置它:

    public IEnumerable<SelectListItem> GenderList
        {
            get
            {
                [...]
                new SelectListItem { Value = "0", Text = "Select", Selected = true},
                [...]
            }
        }
    

    或枚举集合以匹配 Gender 值:

    var selected = GenderList.SingleOrDefault(item => item.Text.Equals(this.Gender));
    if (selected != null)
        selected.Selected = true;
    

    【讨论】:

    • 我必须从属性中动态选择值。不是静态的
    • 虽然我认为我的原始答案已经足够了,但我对其进行了编辑以完全解决您的问题。
    • @ISun - 你错了。使用 DropDownListFor 时忽略 Selected 属性,它始终使用模型值。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-23
    相关资源
    最近更新 更多