ASP.NET MVC 4想要从数据库填充下拉列表

时间:2013-10-12 10:59:06

标签: linq entity-framework asp.net-mvc-4 html-select

我是ASP.NET MVC 4中的新人。我想在数据库表BO中填充dropdownlist,其中列名为Id, Code, Name, OrgId。我想绑定两个Code& Name列的数据到DataTextfield和Id列Data to DataValueField的下拉列表。我为此创建了代码,如下所示,但它不是从TABLE返回数据而且var BOList保持为空:

my connectionstring is 


 <add name="iRegDBContext"
  connectionString="Data Source=****;Initial Catalog=iReg;User ID=**;Password=****;Integrated Security=True"
  providerName="System.Data.SqlClient"
/>

我的控制器类:

public class iRegController : Controller
{
    private iRegDBContext l_oDbBO = new iRegDBContext();  

    // GET: /iReg/

    public ActionResult PopulatejQgrid()
    {
        var BOList = l_oDbBO
                     .BO
                     .ToList()
                     .Select(d => new SelectListItem
                         {
                             Value = d.Id.ToString(),
                             Text = d.Name + "[ " + d.Code + " ]"
                         });
        ViewBag.BOData = new SelectList(BOList, "Value", "Text"); 
        return View();
    }
}

我的模特课:

public class BO
{
    public Guid Id { get; set; }
    public string Code { get; set; }
    public string Name { get; set; }
}

public class iRegDBContext : DbContext
{
    public DbSet<BO> BO { get; set; }
}

我的cshtml课程:

@model MvciReg.Models.BO

@{
    ViewBag.Title = "PopulatejQgrid";
}

@using (Html.BeginForm())
{
    <fieldset>
        BO : 

        @Html.DropDownList("BOData")
        <p>
            <input type="submit" value="Go" />
        </p>
    </fieldset>
}

我真的不知道我哪里出错了。我根据以下链接 Click here 开发了我的代码。 请建议修改代码......

更新我在我的控制器中尝试了 Matt Bodily的代码,我看到的是代码没有从数据库中获取数据,而且代码是

    public ActionResult populatejQgrid()
    {
        ViewBag.BOData = GetDropDown();

        return View();
    }

    public static List<SelectListItem> GetDropDown()
    {
        List<SelectListItem> ls = new List<SelectListItem>();
        var lm = from m in db.BOs //fetch data from database
                 select m;
        foreach (var temp in lm)
        {
            ls.Add(new SelectListItem() { Text = temp.Name, Value = temp.Id.ToString() });
        }
        return ls;
    }

在控制器中:

      @Html.DropDownList("BOData", (List<SelectListItem>)ViewBag.BOData)

但是当我通过观察看到ls的价值时,它始终显示Count = 0,但它没有给我任何错误。

我发现了一些新问题。当我把鼠标指针放在var lm上时;它显示我查询和FROM子句中的查询表名称不是我的SQL数据库中的那个。我的SQL表名是BO,在查询中它是BOes。我不知道这个名字来自哪里。我认为这是造成这一问题的主要原因所以我如何克服这个问题?

4 个答案:

答案 0 :(得分:3)

首先在VIEW中为Dropdownlist创建一个BO列表

@{
    var Bolst= Model.BO.Select(cl => new SelectListItem
       {
           Value = cl.Value.ToString(),
           Text = cl.Text== null ? String.Empty : cl.Text
       });
}

@(Html.DropDownList("sampleDropdown", BOlst, "-----Select-----"))

在控制器中:

    return View(BOlst); // why use Viewbag when directly pass it to view

答案 1 :(得分:0)

从我在您的代码中看到的,您正在创建选择列表并在控制器上设置ViewBag.BOData。 因此,为了在视图上呈现它,你应该这样做

@Html.DropDownList(ViewBag.BOData)

而不是

@Html.DropDownList("BOData")

关于对数据库的访问,您是否尝试在现有数据库中使用“代码优先”? 如果你需要覆盖像这样的上下文构造函数

public class iRegDBContext : DbContext
{
  public iRegDBContext()
     :base("Name= iRegDBContext")
   {
   }
}

请参阅此链接http://msdn.microsoft.com/en-us/data/jj200620.aspx

希望它有所帮助。

答案 2 :(得分:0)

尝试以这种方式构建下拉列表

@Html.DropDownList(x => x.Selected, PathToController.GetDropDown())

然后在你的控制器中

public static List<SelectListItem> GetDropDown()
{
    List<SelectListItem> ls = new List<SelectListItem>();
    lm = (call database);
    foreach (var temp in lm)
    {
        ls.Add(new SelectListItem() { Text = temp.name, Value = temp.id });
    }
    return ls;
}

希望这会有所帮助

答案 3 :(得分:0)

我最近也遇到过这个问题,并设法使用Viewbag。你需要使它适合你的Db表,但它很有用,而且非常简单。

Populating Drop Down Box with Db Data