3

我是 ASP.NET MVC 4 的新手。我想从数据库表 BO 中填充下拉列表,其中 Column name 为Id, Code, Name, OrgId。我想将两个Code&Name列的数据绑定到 DataTextfield,将Id列 Data 绑定到下拉列表的 DataValueField。我为此创建了如下代码,但它没有从表中返回数据并且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>
}

我真的不知道我哪里错了。我从以下链接的参考中开发了我的代码 单击此处请建议在代码中更正...

更新:我尝试在我的控制器中遵循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

4 回答 4

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
于 2013-10-14T06:52:17.250 回答
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;
}

希望这会有所帮助

于 2013-10-12T15:25:46.533 回答
0

我最近也遇到了这个问题,并设法使用 Viewbag 让它工作。您需要使其适合您的 Db 表,但它可以工作并且非常简单。

使用 Db 数据填充下拉框

于 2014-07-11T10:30:18.443 回答
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

希望能帮助到你。

于 2013-10-12T14:27:38.530 回答