MVC2 SelectedListItem不绑定到ViewModel

时间:2011-02-16 10:35:45

标签: asp.net-mvc-2 viewmodel selectlistitem

我遇到了一个selectlistitem的问题,正在从数据库中检索其值。

它显示视图中的项目列表,但不会将所选值传递(POST)到模型中。

因此,当用户提交或由于验证而重新加载页面时,选择值(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 个答案:

答案 0 :(得分: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 to Entities错误(如果您正在使用它),请将您的方法更改为

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;
}

一切都会正常。