在使用@Html.DropDownListFor的ViewData时,不能将'System.Collections.Generic.IEnumerable<System.Web.Mvc.SelectListItem>'转换为'string'。

问题描述 投票:0回答:1

我发现很多帖子都是关于同样的问题,但没有一个是关于视图数据和连接仓库的。我只需要使用一个类,而不需要单独的类来处理这些数据。CountriesGender请注意

错了

enter image description here

控制器

[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;
        }]
asp.net asp.net-mvc razor dropdownlistfor
1个回答
0
投票

看来你是想同时设置两个数据源为DropDownList,这两个数据源分别是 Model._CountriesListViewData["CountriesList"] 并导致构建错误。没有这样一个重载方法 DropDownListFor你必须选择其中之一 ViewBagModel.

根据我的理解,你不需要使用 _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

© www.soinside.com 2019 - 2024. All rights reserved.