Asp.net mvc 2 在asp.net mvc 2.0中将数据库中的数据绑定到DropDownListFor

Asp.net mvc 2 在asp.net mvc 2.0中将数据库中的数据绑定到DropDownListFor,asp.net-mvc-2,Asp.net Mvc 2,我是asp.NETMVC2.0的新手,我试图搜索这篇文章,但仍然无法得到我想要的答案 我有一个表格可以将角色分配给每个员工。因此,我创建了一个表单,可以输入员工的姓名并选择他们所处的角色。该角色正在从表角色中删除。我使用linq to sql从表角色查询RoleName和RoleID,并希望将其绑定到视图中的DropDownListFor 我有一个模型: public class UserModels { public string name { get; set; } publi

我是asp.NETMVC2.0的新手,我试图搜索这篇文章,但仍然无法得到我想要的答案

我有一个表格可以将角色分配给每个员工。因此,我创建了一个表单,可以输入员工的姓名并选择他们所处的角色。该角色正在从表角色中删除。我使用linq to sql从表角色查询RoleName和RoleID,并希望将其绑定到视图中的DropDownListFor

我有一个模型:

public class UserModels
{

   public string name { get; set; }
   public string role { get; set; }

}
这就是我在控制器中所做的:

[HttpPost]
public ActionResult UserMaintenance(FormCollection frm)
{
if (ModelState.IsValid)
{
    EMP_DBSEntities context = new EMP_DBSEntities();
    tblUserLogin user = new tblUserLogin();
    user.UserName = frm["userLogin"].ToString();

    IEnumerable<SelectListItem> role_list = context.tblRoles.Select(d => new SelectListItem
    {
        Value = d.RoleID.ToString(),
        Text = d.RoleName
    });


    context.AddTotblUserLogins(user);
    context.SaveChanges();
    return View();
}
else
{
    return View();
}
}
谁能告诉我如何将角色列表绑定到我视图中的DropDownList for


谢谢。

为了创建下拉列表,您需要一个具有两个属性的视图模型:一个包含选定值的标量属性和一个包含可用选项的集合属性

因此,在ASP.NET MVC中,请始终从编写视图模型开始:

public class UserRoleViewModel
{
    [DisplayName("name")]
    public string EmployeeName { get; set; }

    [DisplayName("role")]
    public int? SelectedRoleId { get; set; }

    public IEnumerable<SelectListItem> Roles { get; set; }
}
最后是一个观点:

<%@ Page 
    Language="C#" 
    MasterPageFile="~/Views/Shared/Site.Master" 
    Inherits="System.Web.Mvc.ViewPage<UserRoleViewModel>" 
%>

...

<% using (Html.BeginForm()) { %>
    <%= Html.EditorFor(x => x.EmployeeName) %>
    <%= Html.DropDownListFor(x => x.SelectedRoleId, Model.Roles, "-- Role --") %>
    <button type="submit">OK</button>
<% } %>

为了创建下拉列表,您需要一个具有两个属性的视图模型:一个包含选定值的标量属性和一个包含可用选项的集合属性

因此,在ASP.NET MVC中,请始终从编写视图模型开始:

public class UserRoleViewModel
{
    [DisplayName("name")]
    public string EmployeeName { get; set; }

    [DisplayName("role")]
    public int? SelectedRoleId { get; set; }

    public IEnumerable<SelectListItem> Roles { get; set; }
}
最后是一个观点:

<%@ Page 
    Language="C#" 
    MasterPageFile="~/Views/Shared/Site.Master" 
    Inherits="System.Web.Mvc.ViewPage<UserRoleViewModel>" 
%>

...

<% using (Html.BeginForm()) { %>
    <%= Html.EditorFor(x => x.EmployeeName) %>
    <%= Html.DropDownListFor(x => x.SelectedRoleId, Model.Roles, "-- Role --") %>
    <button type="submit">OK</button>
<% } %>

什么错误?错误信息是什么?这很奇怪,因为我不是在脑子里发明这个代码的。这是我从一个完全工作的示例中复制粘贴的东西,我刚刚设置了这个示例。所以我猜你一定改变了什么。这是怎么一回事?您使用的是什么版本的框架?我注意到你用asp.net-mvc-2标记了你的问题,所以我更新了我的视图代码,因为最初我发布了一个Razor示例。现在更新了WebForms视图引擎示例。这是我的查询var query=from _context.tblRoles select _role.ToList;然后在查询{var role=new[]{new RoleID=roleItem.RoleID,RoleName=roleItem.RoleName};}中为每个var roleItem分配它然后错误是找不到隐式类型数组的最佳类型。为什么要编写所有这些代码LINQ和循环之类的东西?简单地说:Roles=new SelectListcontext.tblRoles、RoleID、RoleName在构建视图模型时直接创建。但我在单击“提交”时遇到一个问题,即它有一个错误对象引用未设置为对象的实例。在x.SelectedRoleId、Model.Roles、-Role-%>行中,我猜您没有在POST操作中分配Roles属性,就像在GET操作中那样。您认为DropDownList将从何处获取其项目?正如您所知,提交表单时,只有选定的值被发送到服务器。出现了什么错误?错误信息是什么?这很奇怪,因为我不是在脑子里发明这个代码的。这是我从一个完全工作的示例中复制粘贴的东西,我刚刚设置了这个示例。所以我猜你一定改变了什么。这是怎么一回事?您使用的是什么版本的框架?我注意到你用asp.net-mvc-2标记了你的问题,所以我更新了我的视图代码,因为最初我发布了一个Razor示例。现在更新了WebForms视图引擎示例。这是我的查询var query=from _context.tblRoles select _role.ToList;然后在查询{var role=new[]{new RoleID=roleItem.RoleID,RoleName=roleItem.RoleName};}中为每个var roleItem分配它然后错误是找不到隐式类型数组的最佳类型。为什么要编写所有这些代码LINQ和循环之类的东西?简单地说:Roles=new SelectListcontext.tblRoles、RoleID、RoleName在构建视图模型时直接创建。但我在单击“提交”时遇到一个问题,即它有一个错误对象引用未设置为对象的实例。在x.SelectedRoleId、Model.Roles、-Role-%>行中,我猜您没有在POST操作中分配Roles属性,就像在GET操作中那样。您认为DropDownList将从何处获取其项目?正如您所知,提交表单时,只有选定的值才会发送到服务器。