2013-06-20 90 views
0

在我看来,它不工作...下拉列表视图中从模型

@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 enum Language { 
    English = 0, 
    Spanish=1, 
    Latin =3 
} 

我的控制器看起来像这样

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

回答

2

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

@Html.DropDownListFor(o => o.Language, (IEnumerable<SelectListItem>)ViewBag.Languages) 

但要确保你使用了正确类型的助手预计:

public ActionResult Edit() 
{ 
    Models.User user = new User(Convert.ToInt32(User.Identity.Name)); 
    ViewBag.Languages = Enum 
     .GetNames(typeof(Language)) 
     .Select(x => new SelectListItem { Value = x, Text = x }) 
     .ToList(); 
    return View (user); 
} 

但既然你提到了一些关于视图模型,我认为你是错用这个词。在你的情况下,我看不到任何视图模型的任何痕迹。视图模型看起来会是这样的:

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) 
+0

它的工作。 U挽救了我的一天,非常感谢。 – JRU