好的,所以我对整个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上观看了几个视频,但没有用,我找不到它。请知道这里有一些知识的人吗?请指出一些很好的教程和/或论坛,我可以浏览更多我可能有的问题
这个项目仍然没有运气..
我正在创建一个表单并在该表单中,我想要一个db-loop(IEnumerable
)..但是当前模型不是IEnumerable
。我几乎陷入困境,观看了一堆教程,他们只列出了一个连接,如果我想要两个模型怎么办?
这是我的控制器,我知道你必须将一个列表传递给视图,对吗?
public ActionResult Registration()
{
return View(db.users.ToList());
}
如何在我的视图中使用IEnumerable
模型获取该列表?
@neoistheone,你的例子并没有给我太多帮助,我的数据库打开了这样:
private DataBaseContext db = new DataBaseContext();
我不知道如何,但它打开了连接。 我已经尝试了这么多个小时,它只是愚蠢,没有睡太久了!
我习惯编写ASP-Classic fyi,这是我第一次认真尝试升级编程最新语言和OOP的知识。
答案 0 :(得分:20)
将SelectList
添加到您的模型中:
public SelectList DropDownList { get; set; }
为该集合构建类:
public class MyListTable
{
public string Key { get; set; }
public string Display { get; set; }
}
然后在您的控制器中,从数据库加载MyListTable
类的数据:
var list = new List<MyListTable>();
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);
你当然可以将这些东西命名为更好的名字,但你明白了。
答案 1 :(得分:7)
已经有了很好的答案,但这是另一种方法。
您将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<User> 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"
作为显示标签。最后一个参数(我把空字符串" "
)是一个默认值,下拉列表将在选择之前显示。
我希望这会对你或其他人有所帮助。
答案 2 :(得分:5)
试试这个,
模型
public string CoutryID { get; set; }
public List<SelectListItem> CountryList { get; set; }
填充列表的控制器方法
public List<Country> 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"))
答案 3 :(得分:3)
如果您是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
答案 4 :(得分:2)
这是我在数据库中的表
看看我的动作控制器
// 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<Objlect> myListFromDatabase,
string PropertyNameOfValueInHtml,
string PropertyNameOfDesplayInHtml,
string SelectedItemValue
);
此行Request.QueryString["LetterStatus"]
因为我在QuerySrting
并基于CurrentCulture
我选择了要显示的列
但我认为最好的方法是,获取或创建项目,然后迭代抛出它们以手动生成选择标记。我在this answer
中很好地描述了这种方法希望这可以帮助你
答案 5 :(得分:2)
我发现这个系统有效(并避免使用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<SelectListItem> YourDropdownList { get; set; }
}
<强>控制器:强>
// Get database values (by whatever selection method is appropriate)
var dbValues = db.YourEntity.ToList();
// Make Selectlist, which is IEnumerable<SelectListItem>
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" })