2012-07-06 76 views
1

我是一個新的asp.net mvc 2.0,我試圖搜索關於這篇文章,但仍然無法得到像我想要的答案。從數據庫綁定數據到DropDownListFor在asp.net mvc 2.0

我有一種形式爲每個員工分配角色。所以我創建了一個表單,可以輸入員工的姓名並選擇他們所在的角色。角色從表角色中獲取。我用linq to sql來查詢表Role中的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(); 
} 
} 

誰能告訴我,我怎麼能綁定role_list我DropDownListFor <>在我看來, 。

謝謝。

回答

1

爲了創建一個下拉列表,您需要一個包含2個屬性的視圖模型:一個包含選定值的標量屬性和一個包含可用選項的集合屬性。

,以便始終在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; } 
} 

然後控制器:

public class HomeController : Controller 
{ 
    public ActionResult Index() 
    { 
     // fetch the roles 
     // could come from a database or something 
     var roles = new[] 
     { 
      new { RoleID = 1, RoleName = "Admin" }, 
      new { RoleID = 2, RoleName = "Foo" }, 
      new { RoleID = 3, RoleName = "Bar" }, 
      new { RoleID = 4, RoleName = "Baz" }, 
     }; 

     // Now we build the model 
     var model = new UserRoleViewModel 
     { 
      EmployeeName = "John", // could come from a database or something 
      SelectedRoleId = 1, // could come from a database or something 
      Roles = new SelectList(roles, "RoleID", "RoleName") 
     }; 

     return View(model); 
    } 

    [HttpPost] 
    public ActionResult Index(UserRoleViewModel model) 
    { 
     return Content(
      string.Format(
       "Selected role for {0} is {1}", model.EmployeeName, model.SelectedRoleId 
      ) 
     ); 
    } 
} 

最後一個觀點:

<%@ 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> 
<% } %> 
+0

謝謝,但它有錯誤'var roles = new []'。 – Nothing 2012-07-06 12:29:47

+0

什麼錯誤?什麼是錯誤信息?這很奇怪,因爲我沒有在頭腦中發明這個代碼。這是我剛剛設置的完整工作示例中複製粘貼的內容。所以我想你一定改變了一些東西。它是什麼?你使用的是什麼版本的框架?我注意到你用asp.net-mvc-2標記了你的問題,所以我更新了我的視圖代碼,因爲最初我發佈了一個Razor示例。現在使用WebForms視圖引擎示例進行更新。 – 2012-07-06 12:32:57

+0

這是我的查詢var query =(從context.tblRoles中的_role選擇_role).ToList();'然後我分配它'foreach(var roleItem在查詢中){var role = new [] {new RoleID = roleItem .RoleID,RoleName = roleItem.RoleName}};}'然後錯誤'找不到隱式類型數組的最佳類型。 – Nothing 2012-07-06 12:40:22