来自数据库的ASP.NET MVC下拉列表

好的,所以我是整个MVC世界的新手,但它似乎是一个很好的完成工作的方式,我试图让它在这里工作。

问题是:我无法从我的SQL数据库中的表中获取数据到我的注册页面上的简单下拉表单。

我不知道在哪里放东西,在哪里编写代码打开表,选择id,在哪里放置response.write以及如何将其发送到视图?

我的模型是这样的:

  public class users { public string name {get; set;} public int user_id {get; set;} } 

我的控制器是这样的:

  [HttpGet] public ActionResult ListUser() { return View(); } 

我的观点是这样的:

 @model Community.Models.users 

我已经用Google搜索了2天,在youtube上观看了几个video但没有用,我找不到它。 拜托,有知识的人吗? 请指出一些很好的教程和/或论坛,我可以浏览更多我可能有的问题


这个项目仍然没有运气..

我正在创建一个表单并在该表单中,我想要一个db-loop( IEnumerable )..但是当前的模型不是IEnumerable 。 我几乎陷入困境,观看了一堆教程,他们都只列出了一个连接,如果我想要两个模型怎么办?

这是我的控制器,我知道你必须将一个列表传递给视图,对吧?

  public ActionResult Registration() { return View(db.users.ToList()); } 

如何在IEnumerable模型的视图中获取该列表?

@neoistheone,你的例子对我没什么帮助,我的DB打开像这样:

 private DataBaseContext db = new DataBaseContext(); 

我不知道如何,但它打开了连接。 我已经尝试了这么多个小时,它只是愚蠢,没有睡太久!

我习惯编写ASP-Classic fyi,这是我第一次认真尝试升级我对编程最新语言和OOP的知识。

SelectList添加到模型中:

 public SelectList DropDownList { get; set; } 

为该集合构建类:

 public class MyListTable { public string Key { get; set; } public string Display { get; set; } } 

然后在您的控制器中,从数据库加载MyListTable类的数据:

 var list = new List(); using (SqlConnection c = new SqlConnection(cString)) using (SqlCommand cmd = new SqlCommand("SELECT KeyField, DisplayField FROM Table", c)) { using (SqlDataReader rdr = cmd.ExecuteReader()) { while (rdr.Read()) { list.Add(new MyListTable { Key = rdr.GetString(0), Display = rdr.GetString(1) }); } } } var model = new users(); model.DropDownList = new SelectList(list, "Key", "Display"); 

最后,您需要将模型发送到视图:

 return View(model); 

现在在剃刀中你可以显示:

 @Html.DropDownListFor(m => Model.DropDownList); 

你当然可以将这些东西命名为更好的名字,但你明白了。

已经有了很好的答案,但这是另一种方法。

您将使用user作为模型, ListUserViewModel作为视图模型, UserController作为控制器。 视图模型的工作是从控制器中携带需要在页面上显示的所有信息,而不会将不需要的属性添加到模型类中。 在您的情况下,用户从数据库列表进入下拉列表。

模型:

 public class User //By the way use singular when naming a class { public string name {get; set;} public int user_id {get; set;} } 

查看模型

 public class ListUserViewModel { public list Users{get; set;} } 

调节器

 public class UserController : Controller { private DataBaseContext db = new DataBaseContext(); [HttpGet] public ActionResult ListUser() { var users = db.Users.ToList(); var viewModel = new ListUserViewModel { Users = users }; return View(viewModel); } } 

现在在视图中使用ListUserViewModel而不是User作为模型

 @model Community.Models.ListUserViewModel 

和下降

 @Html.DropDownListFor(m => m.Users, new SelectList(Model.Users, "user_id", "name"), " ") 

说明:

您正在为具有Model.Users用户创建下拉列表作为选择列表数据源。 "user_id"作为所选用户的值, "name"作为显示标签。 最后一个参数(我把空字符串" " )是一个默认值,下拉列表将在选择之前显示。

我希望这会对你或其他人有所帮助。

试试这个,

模型

 public string CoutryID { get; set; } public List CountryList { get; set; } 

填充列表的控制器方法

 public List getCountryList() { using (QRMG_VendorPortalDataContext _context = new QRMG_VendorPortalDataContext()) { return (from c in _context.Countries where c.IsDeleted == false select c).ToList(); } } 

在视图中下拉列表

  @Html.DropDownListFor(m => m.CoutryID, new SelectList(Model.CountryList, "CoutryID", "Value")) 

如果您是ASP.Net MVC的新手,这是一个非常好的教程,向您展示MVC模式的工作原理。

MVC3: http : //www.asp.net/mvc/tutorials/getting-started-with-aspnet-mvc3/cs/intro-to-aspnet-mvc-3
MVC4: http : //www.asp.net/mvc/tutorials/mvc-4/getting-started-with-aspnet-mvc4/intro-to-aspnet-mvc-4

以下是示例代码: http : //code.msdn.microsoft.com/Introduction-to-MVC-3-10d1b098

这是一个有用的video: http : //www.asp.net/mvc/videos/mvc-1/conference-presentations/creating-nerddinnercom-with-microsoft-aspnet-model-view-controller-mvc

这是我在数据库中的表

在此处输入图像描述

看看我的动作控制器

  // GET: Letters public ActionResult Index() { ViewBag.LetterStatus = new SelectList(LetterStatusService.GetAllLettersStatus(), "Id", (CultureHelper.GetCurrentCulture() == "ar") ? "NameArabic" : "Name", Request.QueryString["LetterStatus"]); return View(); } 

并在视图中

  @Html.DropDownList("LetterStatus") 

我使用的构造函数是

 new SelectList( list myListFromDatabase, string PropertyNameOfValueInHtml, string PropertyNameOfDesplayInHtml, string SelectedItemValue ); 

这行Request.QueryString["LetterStatus"]因为我在QuerySrting发送了Selected Items

并基于CurrentCulture我选择了要显示的列

结果是 在此处输入图像描述

但我认为最好的方法是,获取或创建项目,然后迭代抛出它们以手动生成选择标记。 我在这个答案中很好地描述了这种方法

希望这能帮助你

我发现这个系统有效(并避免使用ViewBag):

查看型号:

 public class YourViewModel { // This could be string, int or Guid depending on what you need as the value public int YourDropdownSelectedValue { get; set; } public IEnumerable YourDropdownList { get; set; } } 

控制器:

 // Get database values (by whatever selection method is appropriate) var dbValues = db.YourEntity.ToList(); // Make Selectlist, which is IEnumerable var yourDropdownList = new SelectList(dbValues.Select(item => new SelectListItem { Text = item.YourSelectedDbText, Value = item.YourSelectedDbValue }).ToList(), "Value", "Text"); // Assign the Selectlist to the View Model var viewModel = new YourViewModel(){ // Optional: if you want a pre-selected value - remove this for no pre-selected value YourDropdownSelectedValue = dbValues.FirstOrDefault(), // The Dropdownlist values YourDropdownList = yourDropdownList }; // return View with View Model return View(viewModel); 

并在视图中:

 @Html.DropDownListFor(a => a.YourDropdownSelectedValue, Model.YourDropdownList, "select this text - change this to null to exclude", new { @class = "your-class" })