none
MVC 5 проблема с DropDownListFor RRS feed

  • Вопрос

  • Собственно проблема такая же как и тут: http://social.msdn.microsoft.com/Forums/ru-RU/e26a5916-5a59-4410-a4c2-dd5a9f319fc4/mvc4-dropdownlistfor?forum=aspnetru
    Потому даже тему почти так же назвал.

    Ошибка происходит тут:

    [HttpPost]
            [AllowAnonymous]
            [ValidateAntiForgeryToken]
            public async Task<ActionResult> ExternalLoginConfirmation(ExternalLoginConfirmationViewModel model, string returnUrl)
            {
                if (User.Identity.IsAuthenticated)
                {
                    return RedirectToAction("Manage");
                }
    
                if (ModelState.IsValid)
                {
                    // Get the information about the user from the external login provider
                    var info = await AuthenticationManager.GetExternalLoginInfoAsync();
                    if (info == null)
                    {
                        return View("ExternalLoginFailure");
                    }
                    var user = new ApplicationUser()
                    { 
                        UserName = model.UserName, 
                        Gender = model.Gender,
                        Country = model.Country,
                        email = model.email,
                        FacebookUrl = model.FacebookUrl
                    };
                    var result = await UserManager.CreateAsync(user);
                    if (result.Succeeded)
                    {
                        result = await UserManager.AddLoginAsync(user.Id, info.Login);
                        if (result.Succeeded)
                        {
                            await StoreFacebookAuthToken(user);
                            await SignInAsync(user, isPersistent: false);
                            return RedirectToLocal(returnUrl);
                        }
                    }
                    AddErrors(result);
                }
                ViewBag.ReturnUrl = returnUrl;
                return View(model);
            }


    после определения user, result.Succeed от CreateAsync возвращает false c ошибкой:

    The ViewData item that has the key 'Gender' is of type 'System.String' but must be of type 'IEnumerable<SelectListItem>'.

    Смотрел решение темы, которую указал выше, но там в модели было поле SelectList и его надо было снова определить. В другой теме, указанной там - изменить название DropDownList, но у меня DropDownListFor где нельзя компоненту название давать.

    Точно такое же задание DropDownListFor в Register.cshtml работает нормально.

    2 апреля 2014 г. 15:30

Ответы

  • UserManager оказывается выдавал ошибку, что UserName может быть только из букв и цифр. Пробелы и подчеркивания считались ошибкой. А потом дебаггер выдавал почему-то ошибку, которая указана выше.
    Добавил строку в accountController.cs при определении UserManager:
                UserManager.UserValidator = new UserValidator<ApplicationUser>(UserManager) { AllowOnlyAlphanumericUserNames = false };

    • Помечено в качестве ответа Rio39 3 апреля 2014 г. 9:27
    3 апреля 2014 г. 9:27