2011-02-16 112 views
1

我有一个selectlistitem的问题,它的值正在从数据库中检索。MVC2 SelectedListItem不绑定到ViewModel

它正在显示视图中的项目列表,但它没有通过(发布)所选值到模型中。

因此,当用户提交或由于验证而重新加载页面时,选择值(PositionApplied)为空。

任何人都可以给我一些指针,我要去哪里错了吗?

在我的控制器:

[HttpGet] 
    public ActionResult Index() 
    { 
     PopulateJobsDropdown(); 
     return View(); 
    } 

    private void PopulateJobsDropdown() 
    { 
     IEnumerable<SelectListItem> items = _service.GetJobs() 
      .Select(c => new SelectListItem 
          { 
           Value = c.JobID.ToString(), 
           Text = c.JobTitle 
          }); 
     ViewData["PositionApplied"] = items; 
    } 

在我的ViewModel

public IEnumerable<SelectListItem> PositionApplied { get; set; } 

在我看来

<%=Html.DropDownList("PositionApplied")%> 

在感谢提前任何指针!

回答

1

那么,哪里是代码行获得的该

ViewData["PositionApplied"] = items; 

public IEnumerable<SelectListItem> PositionApplied { get; set; } 

类似:

this.PositionApplied = ViewData["PositionApplied"] as IEnumerable<SelectListItem>; 

,你可以在你的浏览简单的使用:

<% 
    IEnumerable<SelectListItem> PositionApplied = 
      ViewData["PositionApplied"] as IEnumerable<SelectListItem>; 
%> 

...

<%= Html.DropDownList("myDropDOwnId", PositionApplied) %> 

或者是有一些自动魔法下MVC2那我不知道关于发生的?正如我使用我一直给你的例子。


新增

为了避免LINQ到实体错误(如果你使用它)改变你的方法

private void PopulateJobsDropdown() 
{ 
    IQueryble<Your_Table> jobs = _service.GetJobs(); 
    List<SelectListItem> items = new List<SelectListItem>(); 
    foreach(var job in jobs) 
     items.add(new SelectListItem 
         { 
         Value = c.JobID.ToString(), 
         Text = c.JobTitle 
         }); 
    ViewData["PositionApplied"] = items; 
} 

一切都将正常工作。

+0

我试过了,模型仍然为空 - 值没有被传递..我在想什么? – beebul 2011-02-16 11:28:28