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

Tob*_*ias 15 .net c# asp.net asp.net-mvc

好的,所以我是整个MVC世界的新手,但它似乎是完成任务的一种非常好的方式,我试图让它在这里工作.

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

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

我的模型是这样的:

    public class users
{
    public string name {get; set;}
    public int user_id {get; set;}
}
Run Code Online (Sandbox Code Playgroud)

我的控制器是这样的:

    [HttpGet]
    public ActionResult ListUser()
    {
        return View();
    }
Run Code Online (Sandbox Code Playgroud)

我的观点是这样的:

@model Community.Models.users
Run Code Online (Sandbox Code Playgroud)

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


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

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

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

    public ActionResult Registration()
    {
        return View(db.users.ToList());
    }
Run Code Online (Sandbox Code Playgroud)

如何在IEnumerable模型中查看我的视图中的列表?

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

private DataBaseContext db = new DataBaseContext();
Run Code Online (Sandbox Code Playgroud)

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

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

Mik*_*oud 21

添加SelectList到您的模型:

public SelectList DropDownList { get; set; }
Run Code Online (Sandbox Code Playgroud)

为该集合构建类:

public class MyListTable
{
    public string Key { get; set; }
    public string Display { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

然后在您的控制器中,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");
Run Code Online (Sandbox Code Playgroud)

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

return View(model);
Run Code Online (Sandbox Code Playgroud)

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

@Html.DropDownListFor(m => Model.DropDownList);
Run Code Online (Sandbox Code Playgroud)

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

  • @Tobias,您不必以与我相同的方式连接到数据库。我只是给你一个例子。您将不能仅复制和粘贴此解决方案,当然您必须适应它,我不是在编写软件-只是为了帮助您解决此问题-因此,代码将无济于事**适合。** (2认同)
  • +1非常详细.我正在尝试填充DDL并在Controller中发布所选值.一切都白费,直到你的解决方案.谢啦 (2认同)

AIM*_*AIM 9

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

您将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;}
}
Run Code Online (Sandbox Code Playgroud)

查看模型

public class ListUserViewModel
{
    public list<User> Users{get; set;}
}
Run Code Online (Sandbox Code Playgroud)

调节器

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

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

@model Community.Models.ListUserViewModel
Run Code Online (Sandbox Code Playgroud)

和下降

@Html.DropDownListFor(m => m.Users, new SelectList(Model.Users, "user_id", "name"), " ")
Run Code Online (Sandbox Code Playgroud)

说明:

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

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


Jee*_*att 5

试试这个,

模型

public string CoutryID { get; set; }
public List<SelectListItem> CountryList { get; set; }
Run Code Online (Sandbox Code Playgroud)

填充列表的控制器方法

public List<Country> getCountryList()
        {
            using (QRMG_VendorPortalDataContext _context = new QRMG_VendorPortalDataContext())
            {
                return (from c in _context.Countries
                        where c.IsDeleted == false
                        select c).ToList();
            }
        }
Run Code Online (Sandbox Code Playgroud)

在视图中下拉列表

 @Html.DropDownListFor(m => m.CoutryID,
         new SelectList(Model.CountryList,
                        "CoutryID", "Value"))
Run Code Online (Sandbox Code Playgroud)


Ric*_*ckL 5

我发现这个系统有效(并且避免使用 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; }
}
Run Code Online (Sandbox Code Playgroud)

控制器:

// 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);
Run Code Online (Sandbox Code Playgroud)

并在视图中:

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