【问题标题】:cannot convert from 'System.Collections.Generic.IEnumerable<System.Web.Mvc.SelectListItem>' to 'string' while using ViewData for @Html.DropDownListFor使用 @Html.DropDownListFor 的 ViewData 时无法从 'System.Collections.Generic.IEnumerable<System.Web.Mvc.SelectListItem>' 转换为 'string'
【发布时间】:2020-06-03 06:26:17
【问题描述】:

我发现了很多关于相同问题的帖子,但没有一个是与视图数据相关的并且与存储库相关联。 Countries 和 Gender 我只需要使用一个类,而不需要单独的类。

错误:

控制器

[HttpGet]
        public ActionResult Member(int? MemberId)
        {
            if (MemberId == null)
            {
                Member m = new Member();
                ViewData["CountriesList"] = _dal.GetCountryList();
                ViewData["GenderList"] = _dal.GetGenderList();
                return View(m);
            }
            var data = _dal.GetMemberData(MemberId);
            if (data == null)
            {
                return View();
            }

            return View(data);
        }

类

public string Country { get; set; }
public string Gender { get; set; }
public string Address { get; set; }
public int Phone { get; set; }
public IEnumerable<SelectListItem> _CountriesList { get; set; }
public IEnumerable<SelectListItem> _GenderList { get; set; }

查看

 <div class="col-md-8">
                <div class="col-md-4">
                    <label id="country">Country</label>
                    @Html.DropDownListFor(m => m.Country, Model._CountriesList, ViewData["CountriesList"] as IEnumerable<SelectListItem>, new { @class = "form-control", placeholder = "-- Select Country --" })
                </div>
                <div class="col-md-4">
                    <label id="gender">Gender</label><br />
                    @Html.DropDownListFor(m => m.Gender, Model._GenderList, ViewData["GenderList"] as IEnumerable<SelectListItem>, new { @class = "form-control", placeholder = "-- Select Gender --" })
                </div>
            </div>

存储库

[public IEnumerable<SelectListItem> GetCountryList()
        {
             var _country = new List<SelectListItem>();
            using (SqlConnection con = new SqlConnection(connectionString))
            {
                SqlCommand cmd = new SqlCommand("sp_CountryList", con);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.AddWithValue("@Flag", "getCountryList");
                con.Open();
                SqlDataReader sdr = cmd.ExecuteReader();
                while (sdr.Read())
                {
                    _country.Add(new SelectListItem { Text = sdr["CountryName"].ToString(), Value = sdr["rowId"].ToString() });
                }
                con.Close();
            }
            return _country;
        }]

【问题讨论】:

  • 我的回答能解决你的问题吗?
  • @SelimYıldız,是的,它确实如此,我已经给你投票了,因为我的声誉点没有显示。希望你能理解。
  • 请将答案标记为已接受(通过单击答案左侧的复选标记),以便对其他人有所帮助。见:stackoverflow.com/help/accepted-answer

标签: asp.net asp.net-mvc razor dropdownlistfor


【解决方案1】:

您似乎正在尝试同时将两个数据源设置为 DropDownList,它们是 Model._CountriesList 和 ViewData["CountriesList"],这会导致构建错误。没有DropDownListFor这样的重载方法,你必须选择其中一个ViewBag或Model。

正如我正确理解的那样,您不需要使用_CountriesList 或_GenderList,因此只需删除Model._CountriesList,因为您使用ViewBag:

<div class="col-md-8">
    <div class="col-md-4">
        <label id="country">Country</label>
        @Html.DropDownListFor(m => m.Country, ViewData["CountriesList"] as IEnumerable<SelectListItem>, new { @class = "form-control", placeholder = "-- Select Country --" })
    </div>
    <div class="col-md-4">
        <label id="gender">Gender</label><br />
        @Html.DropDownListFor(m => m.Gender,  ViewData["GenderList"] as IEnumerable<SelectListItem>, new { @class = "form-control", placeholder = "-- Select Gender --" })
    </div>
</div>

有关更多信息,请查看 DropDownListFor 的重载

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-13
    • 2013-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-23
    相关资源
    最近更新 更多