2014-02-08 77 views
0

没有具有'UserName'键的'IEnumerable'类型的ViewData项。 在视图中有2个下拉列表 - 对于用户和角色,提交后我需要为选择的用户保存角色。与角色一切都好,但用户的麻烦。我有列表中的用户列表,但我不能读取数据库。如果使用Html.TextBox(“用户名”) - 它的作品,但管理员将手动写入用户名,这是不好的。 我不是MVC的专家,所以apreciate任何帮助。 控制器:没有类型为'IEnumerable <SelectListItem>'的ViewData项具有'UserName'键'

UsersContext db = new UsersContext(); 

    public ActionResult Index() 
    { 
     SelectList list = new SelectList(Roles.GetAllRoles()); 
     ViewBag.Roles = list; 

     List<SelectListItem> items = new List<SelectListItem>(); 
     foreach (var user in db.UserProfiles.ToList()) 
     { 
      SelectListItem li = new SelectListItem 
      { 
       Value = user.UserName, 
       Text = user.UserName 
      }; 
      items.Add(li); 
     } 

     ViewBag.UserName = items; 

     return View(db.UserProfiles.ToList()); 
    } 

    [HttpPost] 
    [ValidateAntiForgeryToken] 
    public ActionResult Index(string RoleName, string UserName) 
    { 

     SelectList list = new SelectList(Roles.GetAllRoles()); 
     ViewBag.Roles = list; 
     return View(); 
    } 

模型SimpleMembershipprovider,是与项目创建的。

查看:

@model IEnumerable<UserProfile> 
@Html.DropDownList("UserName", ViewBag.UserName as SelectList) - here mistake 

我应该怎么做来解决?

回答

0

试试这个:

@model IEnumerable<UserProfile> 
@Html.DropDownList("UserName",new SelectList(ViewBag.UserName, "Value", "Text")) 

或更改UserNameSelectList的类型,然后在这里进行修改:

ViewBag.UserName = new SelectList(items, "Value", "Text"); 
//instead of ViewBag.UserName = items; 
0

类型的项目为List<SelectListItem>,不SelectList。尝试:

ViewBag.UserName as List<SelectListItem> 
1

问题出在下面的代码 -

public ActionResult Index(string RoleName, string UserName) 
{ 
    SelectList list = new SelectList(Roles.GetAllRoles()); 
    ViewBag.Roles = list; 
    return View(); 
} 

在上面的代码中你永远不启动 - ViewBag.UserName,但你的观点是希望在ViewBag UserName属性(你只发起的角色)。你启动它,问题就会完成。

1

这样做:

ViewBag.cityid = new SelectList(db.hr_pr_cities, "CityID", "Name"); 

,并考虑这样的:

@Html.DropDownList("cityid", null, "Select City", null) 
相关问题