c# - ASP.NET MVC 'SelectListItem' 没有定义键错误

标签 c# asp.net asp.net-mvc

我正在使用 ASP.NET 个人用户帐户 实现并尝试在注册 View 中添加一个 DropDownList,以便用户可以选择他来自的城市。我收到以下错误: 'SelectListItem' 没有定义键。为此 EntityType 定义键。 SelectListItems: EntityType: EntitySet 'SelectListItems' 基于没有定义键的类型 'SelectListItem'。

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>

Controller :

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);
}

最后,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);
        }

最佳答案

尝试使用这个

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

而不是这个

@Html.DropDownList("CityId", Model.Cities, "选择城市", new { @class = "form-control" })

关于c# - ASP.NET MVC 'SelectListItem' 没有定义键错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53436480/

相关文章:

c# - 如何知道我的应用程序的哪一部分使用该文件

asp.net-mvc - .NET MVC 4 路线图和 Html.Action

javascript - 构建 MVC Controller 的 POST url

c# - 模拟文件锁定时在 C# 中等待 File.Open

c# - WPF 应用程序的意外行为

c# - Azure Blob 存储 - MVC Web 应用程序 - 有没有办法直接上传到 Azure Blob 存储而不通过 MVC Web 应用程序?

c# - 来自部分内部的 Asp.Net MVC 父 Html.ViewBag

c# - 如何将字符串四舍五入到小数点后两位?

c# - 获取gridview复选框

c# - ASP.NET MVC RenderAction 中的以下方法或属性之间的调用不明确