В ASP.NET MVC «SelectListItem» не определен ключ. Ошибка - PullRequest
0 голосов
/ 22 ноября 2018

Я использую ASP.NET отдельные учетные записи пользователей реализация и попытался добавить DropDownList в окне просмотра реестра, чтобы пользователь мог выбрать город, из которого он находится.Я получаю следующую ошибку: В «SelectListItem» не определен ключ.Определите ключ для этого EntityType.SelectListItems: EntityType: EntitySet «SelectListItems» основан на типе «SelectListItem», для которого не определены ключи.

In RegisterViewModel Я добавил следующее:

  [Required(ErrorMessage = "Select City!")]
  [Display(Name = "City")]
  public int CityId { get; set; }
  public List<SelectListItem> Cities { get; set; }

Вид :

<div class="form-group">
     @Html.LabelFor(m => m.CityId, new { @class = "col-md-2 control-label" })
     <div class="col-md-10">
            @Html.DropDownList("CityId", Model.Cities, "Select city", new { @class = "form-control" })
     </div>
</div>

Контроллер:

GET метод:

public ActionResult Register()
 {
        var model = new RegisterViewModel();
        model.Cities = new List<SelectListItem>();
        SqlConnection con = //here is the connection string;
        string query = "SELECT * FROM City";
        con.Open();
        try
        {
            SqlCommand com = new SqlCommand(query, con);
            SqlDataReader reader = com.ExecuteReader();
            while (reader.Read())
                {  
                   var city = new SelectListItem { Text = reader["Name"].ToString(), Value = reader["Id"].ToString() };
                   model.Cities.Add(city);
                }
            }
            catch(Exception ex)
            {
                Response.Write("Eroare baza de date" + ex.Message);
            }
            finally
            {
                con.Close();
            }

            return View(model);
}
* 1025И, наконец, метод POST
public async Task<ActionResult> Register(RegisterViewModel model)
        {
            if (ModelState.IsValid)
            {
               model.Cities = new List<SelectListItem>();
               int  cityId = model.CityId;
               var user = new ApplicationUser 
                    { UserName = model.UserName, Email = model.Email, CityId = cityId};
                var result = await UserManager.CreateAsync(user, model.Password);
                if (result.Succeeded)
                {
                    await SignInManager.SignInAsync(user, isPersistent:false, rememberBrowser:false);

                    return RedirectToAction("Index", "Home");
                }
                AddErrors(result);
            }

            return View(model);
        }

1 Ответ

0 голосов
/ 23 ноября 2018

попробуйте использовать это

@Html.DropDownListFor(x=>x.CityId, Model.Cities, "Select city", new { @class = "form-control" })

вместо этого

@Html.DropDownList("CityId", Model.Cities, "Select city", new { @class = "form-control"})

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...