使用存储过程填充@ html.listbox

时间:2013-08-23 07:54:07

标签: asp.net-mvc asp.net-mvc-4 razor entity-framework-4 listboxitem

我首先在mvc4(razor)中使用带有db的实体

要求:我有sp返回id和显示名称, 我需要在@html.listboxfor中显示名称 我使用接口从存储过程中获取详细信息。当我从存储过程中获得控制器中的结果时,我将结果保存到列表框中, 我无法弄清楚如何将它存储在列表框中。 我对控制器代码感到震惊。请帮助。

代码:

public class projService :Iproj
{
    project dbContext;

    public projService()
    {
        dbContext = new projectEntities();
    }

    public List<GetResourceOrderDisplay_Result> Getresorderdisplay()
    {
        List<GetResourceOrderDisplay_Result> oGetresorderdisplay = new List<GetResourceOrderDisplay_Result>();
        oGetresorderdisplay = dbContext.GetResourceOrderDisplay().ToList();
        return oGetresorderdisplay.ToList();
    }
}

控制器:

public ActionResult testview()
{
    List<GetResourceOrderDisplay_Result> listboxdata = new List<GetResourceOrderDisplay_Result>();
    listboxdata = _Scheduler.Getresorderdisplay();
    ListboxViewModel objListboxViewModel = new ListboxViewModel();

    //struck with the follwing line.
    objListboxViewModel.resourcename=listboxdata ????

    return View(objListboxViewModel); 
}

视图:

@model project.ViewModels.ListboxViewModel
@Html.ListBoxFor( m=> m.resourcename,Model.resourcename, new { @class = "resList",style="height: 462px;"})

模型:

public class ListboxViewModel
{
    public string resourceid{get; set; }
    //listbox Values
    public List<SelectListItem> resourcename{get; set;}
}

修改:GetResourceOrderDisplay_Result

using System;
using System.Collections.Generic;

namespace proj.Data
{
    public partial class GetResourceOrderDisplay_Result
    {
        public int ID { get; set; }
        public string DisplayName { get; set; }
        }
   }

EDIT2: 这是我在更新后得到的错误: enter image description here

**Edit 3:**

enter image description here

1 个答案:

答案 0 :(得分:2)

基本上您需要做的是将从数据库中检索到的列表数据转换为List<SelectListItem>,以便显示它。 Linq Select方法非常简单:

objListboxViewModel.resourcename =
    listboxdata.Select(x => new SelectListItem() { Text = x.DisplayName,
                                                   Value = x.ID.ToString() })
               .ToList();

因此,您将TextValue属性设置为取决于GetResourceOrderDisplay_Result的定义以及它具有的属性。在Select方法中,x代表listboxdata列表的单个元素,类型为GetResourceOrderDisplay_Result,因此您可以访问x.Property之类的属性。以这种方式构造的Select方法将返回SelectListItem的新列表。