Я получаю ошибку в ienumerable & lt;selectlist>
вот моя ошибка:-
An exception of type 'System.InvalidOperationException' occurred in System.Web.Mvc.dll but was not handled in user code Additional information: The ViewData item that has the key 'City' is of type 'System.String[]' but must be of type 'IEnumerable<SelectListItem>'.
я превратил свой город из струны в
IEnumerableНо все равно не работает
вот моя модель alofcity (отсюда я получаю свой город):-
public class allcity { [Key] public int cid { get; set; } [Required] public string cities { get; set; } }
вот моя Registerviewmodel:-
public string FirstName { get; set; } [Required] public string MiddleName { get; set; } [Required] public string LastName { get; set; } [Required] public string Gender { get; set; } [Required] [DataType(DataType.Date)] public string DOB { get; set; } [Required] [RegularExpression("^[0-9]{12}$")] public decimal Mobile { get; set; } [Required] public string Address { get; set; } [Required] public IEnumerable<string> City { get; set; }
если я обращу это :-
public IEnumerable<string> City { get; set; }до настоящего времени:-
public IEnumerable<selectlist> City { get; set; }
тогда он не будет сохраняться в базе данных
вот мой контролер счета
private ApplicationDbContext db = new ApplicationDbContext(); // GET: /Account/Register [AllowAnonymous] public ActionResult Register() { IEnumerable<SelectListItem> item = db.allofcity.Select(C => new SelectListItem { Value = C.cities, Text = C.cities }); ViewBag.citi = item; return View(); } // // POST: /Account/Register [HttpPost] [AllowAnonymous] [ValidateAntiForgeryToken] public async Task<ActionResult> Register([Bind(Exclude = "UserPhoto")]RegisterViewModel model) { if (ModelState.IsValid) { // To convert the user uploaded Photo as Byte Array before save to DB byte[] imageData = null; if (Request.Files.Count > 0) { HttpPostedFileBase poImgFile = Request.Files["UserPhoto"]; using (var binary = new BinaryReader(poImgFile.InputStream)) { imageData = binary.ReadBytes(poImgFile.ContentLength); } } var user = new ApplicationUser() { UserName = model.Email , ConfirmPassword=model.ConfirmPassword, FirstName = model.FirstName, MiddleName = model.MiddleName, LastName = model.LastName, Gender = model.Gender, DOB = model.DOB, Mobile = model.Mobile, Address = model.Address, City=model.City}; //Here we pass the byte array to user context to store in db user.UserPhoto = imageData; user.Email = model.Email; user.ConfirmedEmail = false; var result = await UserManager.CreateAsync(user, model.Password); if (result.Succeeded) { System.Net.Mail.MailMessage m = new System.Net.Mail.MailMessage( new System.Net.Mail.MailAddress("myid", "Web Registration"), new System.Net.Mail.MailAddress(user.Email)); m.Subject = "Email confirmation"; m.Body = string.Format("Dear {0}<BR/>Thank you for your registration, please click on the below link to complete your registration: <a href=\"{1}\" title=\"User Email Confirm\">{1}</a>", user.UserName, Url.Action("ConfirmEmail", "Account", new { Token = user.Id, Email = user.Email }, Request.Url.Scheme)); m.IsBodyHtml = true; System.Net.Mail.SmtpClient smtp = new System.Net.Mail.SmtpClient("smtp-mail.outlook.com"); smtp.Credentials = new System.Net.NetworkCredential("my id", "mypassword"); smtp.Port = 587; smtp.EnableSsl = true; smtp.Send(m); return RedirectToAction("Confirm", "Account", new { Email = user.Email }); } else { AddErrors(result); } } // If we got this far, something failed, redisplay form return View(model); }
и вот мой взгляд:-
<div class="form-group"> @Html.LabelFor(m => m.City, new { @class = "col-md-2 control-label" }) <div class="col-md-10"> @Html.DropDownListFor(Model=>Model.City, (IEnumerable<SelectListItem>)ViewBag.citi, "Select City", new { @class = "form-control" }) </div> </div>
Что я уже пробовал:
у меня есть то же самое в другом решении без проверки адреса электронной почты , и оно сохраняет выбранный город из базы данных в мою registerviewmodel
но в этом решении я использую проверку электронной почты и получаю эту ошибку
я перепробовал все, но все равно приходит ошибка