با سلام مجدد. با تشکر از جواب شما. من مشکلمو توی تابع Edit() حل کردم. به این صورت که ابتدا همه نقشها رو از پایگاه داده میخونم و توی یه List<SelectListItem> نگهداری میکنم. و برای هر کاربر هم نقش هاشو میخونم. سپس مقایسه میکنم که هر نقش که کاربر داره رو توی اون List<SelectListItem> خاصیت Selected رو true میکنم. این روش جواب داد
اما ببخشید متوجه نشدم روشی که شما میگین چطوری هستش. فکر میکنم روش شما سادهتر باشه. کدهای من اینه:
اما ببخشید متوجه نشدم روشی که شما میگین چطوری هستش. فکر میکنم روش شما سادهتر باشه. کدهای من اینه:
//this method is in "UserController" class that select all available roles form database [NonAction] public List<SelectListItem> GetRoleList() { var usrMgmt = new UserManagement(); var RoleList = new List<SelectListItem>(); foreach (KeyValuePair<string, string> pair in usrMgmt.GetAllRoles()) { RoleList.Add(new SelectListItem { Text = pair.Value, Value = pair.Key, Selected = false }); } return RoleList; } //--------------------------------------------------------------------------- //this method is in "UserController" class that use for editing a user [HttpGet] public ActionResult Edit(string Username) { var roles = GetRoleList(); UserManagement usrMgmt = new UserManagement(); var query = usrMgmt.Select(Username); foreach (string role in query.Roles) { int index = roles.FindIndex(x=>x.Value == role); roles[index].Selected = true; } ViewBag.Roles = roles; return View(query); } //-------------------------------------------------------------- //this method is in "UserManagement" class in model layer, return a //dictionary<string,string> that first string is english role name and second one is persian role //name public Dictionary<string,string> GetAllRoles() { Dictionary<string, string> roles = new Dictionary<string, string>(); var db = new SamaEntities(); string query = ""; string[] roleNames = Roles.GetAllRoles(); foreach (string role in roleNames) { query = db.aspnet_Roles.Single(x => x.RoleName == role).Description; roles.Add(role, query); } return roles; }