Я создаю динамический выпадающий список с этим кодом:
[AllowAnonymous]
public ActionResult Register()
{
var roles = db.Roles.Select(r => new { RoleID = r.Id, RoleName = r.Name }).ToList();
ViewBag.Roles = new SelectList(roles, "RoleID", "RoleName");
return View();
}
Вид:
<div class="form-group">
<label>نقش</label>
<div class="col-md-10">
@Html.DropDownListFor(item => item.UserRoles, ViewBag.Roles as SelectList, "-- Select --")
</div>
</div>
Когда я выбираю роль для регистрации, покажите мне эту ошибку:
Пользователь создан в таблице AspNetUsers
, но не в AspNetUserRoles
.
В чем проблема? /********************************************************* **********************************************/
Изменить
Модель:
Контролер:
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Register(RegisterViewModel model, HttpPostedFileBase UserPhoto)
{
if (ModelState.IsValid)
{
model.DateRegister = DateTime.Now;
var user = new ApplicationUser
{
UserName = model.UserName,
Name = model.Name,
Family = model.Family,
PhoneNumber = model.PhoneNumber,
Gender = model.Gender,
BirthDay = model.BirthDay,
DateRegister = model.DateRegister,
IsActive = false,
Email = model.Email
};
if (UserPhoto != null)
{
UserPhoto = Request.Files[0];
var ext = System.IO.Path.GetExtension(UserPhoto.FileName);
if (ext == ".jpeg" || ext == ".jpg" || ext == ".png")
{
string filename = model.PhoneNumber + ext;
UserPhoto.SaveAs(Server.MapPath(@"~/Image/" + filename));
user.UserPhoto = filename;
}
}
var result = await UserManager.CreateAsync(user, model.Password);
if (result.Succeeded)
{
await SignInManager.SignInAsync(user, isPersistent: false, rememberBrowser: false);
await UserManager.AddToRoleAsync(user.Id,model.UserRoles);
return RedirectToAction("Index", "Home");
}
AddErrors(result);
}
return View(model);
}
ViewModel
, в то время как из действия контроллераRegister
вы не передаете свойViewModel
вView
- person mmushtaq   schedule 10.10.2016AddToRoleAsync
передал параметрUserRoles
какRoleId
, а неName
, поэтому выдача IOE как роли не существует. Пожалуйста, покажите код вашего контроллера, который включает назначение ролей пользователей. На этот раз попробуйтеViewBag.Roles = new SelectList(roles, "RoleName", "RoleName");
и передайте значение DDL в методAddToRoleAsync
. - person Tetsuya Yamamoto   schedule 10.10.2016