【问题标题】:MVC2 SelectedListItem not binding to ViewModelMVC2 SelectedListItem 未绑定到 ViewModel
【发布时间】:2011-06-28 06:29:46
【问题描述】:

我遇到了一个 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")%>

提前感谢任何指点!

【问题讨论】:

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


    【解决方案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;
    }
    

    一切都会好起来的。

    【讨论】:

    • 我已经尝试过了,模型仍然为空 - 值没有被传递。我错过了什么??
    • 调试并查看控制器中的PositionApplied 变量和ViewData["PositionApplied"] 以及何时进入视图
    • 我几乎可以肯定你最终会遇到LINQ to Entities does not recognize the method 'System.String ToString()' method, and this method cannot be translated into a store expression 问题...
    • 不行还是不行。选择列表值未传递到模型中。在这里尝试了所有示例。太令人沮丧了:(
    • 另外我不能添加这是 viewModel 因为它会导致问题:public IEnumerable PositionApplied { get;放; }
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-20
    • 2013-08-07
    相关资源
    最近更新 更多