来自数据库的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" })