Asp.net mvc 模型视图中的下拉列表

Asp.net mvc 模型视图中的下拉列表,asp.net-mvc,asp.net-mvc-4,Asp.net Mvc,Asp.net Mvc 4,在我看来,这是行不通的 @model PASKAN.Web.Security.Models.User <p class="lan-name"><label>Language</label>@Html.DropDownListFor(o => o.Language, Enum.GetValues(typeof(Enum)).Cast<Enum>().Select(x => new SelectListItem { Text = x.ToS

在我看来,这是行不通的

@model PASKAN.Web.Security.Models.User
<p class="lan-name"><label>Language</label>@Html.DropDownListFor(o => o.Language, Enum.GetValues(typeof(Enum)).Cast<Enum>().Select(x => new SelectListItem { Text = x.ToString(), Value = ((int)x).ToString() }))</p>
我的控制器看起来像这样

public ActionResult Edit()
{
    Models.User user = new User(Convert.ToInt32(User.Identity.Name));
    ViewBag.Languages = Enum.GetNames(typeof(Language)).ToList();
    return View (user);
}

您在ViewBag中填充了这些语言,因此请在视图中使用它们:

@Html.DropDownListFor(o => o.Language, (IEnumerable<SelectListItem>)ViewBag.Languages)
但既然你提到了视图模型,我认为你误用了这个术语。在您的情况下,我看不到视图模型的任何痕迹。视图模型应如下所示:

public class MyViewModel
{
    public string Language { get; set; }
    public IEnumerable<SelectListItem> Languages { get; set; }
}
在强类型视图中:

@model MyViewModel
...
@Html.DropDownListFor(x => x.Language, Model.Languages)
public class MyViewModel
{
    public string Language { get; set; }
    public IEnumerable<SelectListItem> Languages { get; set; }
}
public ActionResult Edit()
{
    var user = new User(Convert.ToInt32(User.Identity.Name));
    var viewModel = new MyViewModel
    {
        Language = user.Language,
        Languages = Enum
            .GetNames(typeof(Language))
            .Select(x => new SelectListItem { Value = x, Text = x })
            .ToList()
    };
    return View (viewModel);
}
@model MyViewModel
...
@Html.DropDownListFor(x => x.Language, Model.Languages)