Set the selected item in dropdownlist in MVC3

时光总嘲笑我的痴心妄想 提交于 2019-12-12 14:13:14

问题


I have to set the selected item for a dropdownlist in view. But its not working.

//View

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

//Model

[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" },
            };
            }
        }

The gender property has the value needs to be selected in the list. Still not working.

Where i'm wrong?


回答1:


First, create your 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" };
        }
    }
}

Then, your controller creates a new instance of this ViewModel and sends it to the view.

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

        return View(viewModel);
    }
}

Finally, the view displays the dropdownlist using the ASP.NET wrapper [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>

The selected value is then automatically chosen according the ViewModel. There's no need to manually set the Selected property of the objects SelectListitem.




回答2:


The SelectListItem type has a Selected property, you need to is to true on the item you wish to set as selected.

You can either set it statically like the following:

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

Or enumerate over the collection for a match with Gender value:

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


来源:https://stackoverflow.com/questions/23579407/set-the-selected-item-in-dropdownlist-in-mvc3

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!