Francesco Bigi Ответов: 2

Dropdownlistfor невозможно установить на строку (MVC)


Привет Люди,
У меня есть эта проблема:
Я хочу поместить семейное положение в выпадающий список, когда я делаю регистрацию нового пользователя, и выбираю женат или не женат, и нажимаю на кнопку Сохранить, на моей БД я вижу, что он получил идентификатор (1, 2) вместо "женат" или "не женат".
Вот что я вижу на своей БД:
Смотрите изображения


What am I missing? 


Что я уже пробовал:

В моей папке Счет -> AccountViewModels.в CS Я поставил эти коды:
public class RegisterViewModel    
    {    
        [Required]    
        [Display(Name = "Etat civil")]    
        [Range(1, 2, ErrorMessage = "Veuillez choisir")]    
        public string Civilite { get; set;     
     }    
public class EtatCivil    
    {    
        public int Id { get; set; }    
        public string Libelle { get; set; }    
    } 


и дальше Контроллеры -> AccountController.в CS
//  
        // GET: /Account/Register  
        [AllowAnonymous]  
        public ActionResult Register()  
        {  
            var lstEtat = new List<EtatCivil>  
            {  
                new EtatCivil {Id = 0, Libelle = "vide"},  
                new EtatCivil {Id = 1, Libelle = "Célibataire"},  
                new EtatCivil {Id = 2, Libelle = "Marié"}  
            };  
            ViewBag.ListEtatCivil = new SelectList(lstEtat, "Id", "Libelle");  
            return View();  
        }  


//  
        // POST: /Account/Register  
        [HttpPost]  
        [AllowAnonymous]  
        [ValidateAntiForgeryToken]  
        public async Task<ActionResult> Register(RegisterViewModel model)  
        {  
            if (!ModelState.IsValid) return View(model);  
            var user = new ApplicationUser() { UserName = model.UserName };  
            var result = await UserManager.CreateAsync(user, model.Password);  
            if (result.Succeeded)  
            {  
                try {  
                    // ajout du user dans la table client  
                    using (var dal = new DALEF.WebShopEntities())  
                    {  
                        dal.Client.Add(  
                            new DALEF.Client  
                            {  
                                CLI_Nom = model.Nom,  
                                CLI_Prenom = model.Prenom,  
                                CLI_Civilite = model.Civilite,  
                                CLI_Email = model.Email,  
                                CLI_Adresse = model.Adresse,  
                                CLI_CodePostal = model.CodePostal,  
                                CLI_Ville = model.Ville,  
                                CLI_Telephone = model.Telephone,  
                                CLI_AspUser_Id = user.Id  
                            });  
                        dal.SaveChanges();  
                    }  
  
                }  
                catch(Exception) {                         
                    //await UserManager.DeleteAsync(user);  
                    ModelState.AddModelError("", "Echec création client, veuillez réessayer");  
                    return View(model);  
                }  
                // on affecte le rôle client  
                UserManager.AddToRole(user.Id, "client");  
                await SignInAsync(user, isPersistent: false);  
                return RedirectToAction("Index", "Home");  
            }  
            var lstEtat = new List<EtatCivil>  
            {  
                new EtatCivil {Id = 0, Libelle = "vide"},  
                new EtatCivil {Id = 1, Libelle = "Célibataire"},  
                new EtatCivil {Id = 2, Libelle = "Marié"}  
            };  
            ViewBag.ListEtatCivil = new SelectList(lstEtat, "Id", "Libelle");  
  
            AddErrors(result);  
  
            // If we got this far, something failed, redisplay form  
            return View(model);  
        }  


На моем Просмотры --> Зарегистрироваться.cshtml по

<div class="form-group">  
        @Html.LabelFor(m => m.Civilite, new { @class = "col-md-2 control-label" })  
        <div class="col-md-10">  
            @Html.DropDownListFor(m => m.Civilite, (SelectList)ViewBag.ListEtatCivil)  
  
        </div> 

2 Ответов

Рейтинг:
1

F-ES Sitecore

Вот как работают выпадающие списки, есть два элемента: имя и значение. Имя-это то, что появляется в списке, а значение-это то, что передается вместе с формой. Обычно вы преобразуете идентификатор обратно в соответствующий текст, когда это необходимо. Однако если вам действительно нужен только текст и вы не заботитесь об идентификаторе, то сделайте и значение, и имя нужного вам текста. Однако я подозреваю, что это не то, что вы действительно хотите сделать.


Рейтинг:
1

Francesco Bigi

Большое спасибо Ф-Эс компания за вашу помощь!

На самом деле я сделал вот что:

//
        // POST: /Account/Register
        [HttpPost]
        [AllowAnonymous]
        [ValidateAntiForgeryToken]
        public async Task<ActionResult> Register(RegisterViewModel model)
        {
            var lstEtat = new List<EtatCivil>
            {
                new EtatCivil {Id = 0, Libelle = "vide"},
                new EtatCivil {Id = 1, Libelle = "Célibataire"},
                new EtatCivil {Id = 2, Libelle = "Marié"}
            };
            ViewBag.ListEtatCivil = new SelectList(lstEtat, "Id", "Libelle");
            if (!ModelState.IsValid) return View(model);
            var user = new ApplicationUser() { UserName = model.UserName };
            var result = await UserManager.CreateAsync(user, model.Password);
            if (result.Succeeded)
            {
                try {
                    // ajout du user dans la table client
                    using (var dal = new DALEF.WebShopEntities())
                    {

                        dal.Client.Add(
                            new DALEF.Client
                            {
                                CLI_Nom = model.Nom,
                                CLI_Prenom = model.Prenom,
                                CLI_Civilite = lstEtat.Find(x=>x.Id == int.Parse(model.Civilite)).Libelle,
                                CLI_Email = model.Email,
                                CLI_Adresse = model.Adresse,
                                CLI_CodePostal = model.CodePostal,
                                CLI_Ville = model.Ville,
                                CLI_Telephone = model.Telephone,
                                CLI_AspUser_Id = user.Id
                            });
                        dal.SaveChanges();
                    }

                }
                catch(Exception) {                       
                    //await UserManager.DeleteAsync(user);
                    ModelState.AddModelError("", "Echec création client, veuillez réessayer");
                    return View(model);
                }
                // on affecte le rôle client
                UserManager.AddToRole(user.Id, "client");
                await SignInAsync(user, isPersistent: false);
                return RedirectToAction("Index", "Home");
            }

            

            AddErrors(result);

            // If we got this far, something failed, redisplay form
            return View(model);
        }


Если это работает, то я вижу в своей БД статус string, а не int. :)