我是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。我不知道这个名字来自哪里。我认为这是造成这一问题的主要原因所以我如何克服这个问题?
答案 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表,但它很有用,而且非常简单。