首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在使用ViewData for @Html.DropDownListFor时,无法从@Html.DropDownListFor转换为“string”

在使用ViewData for @Html.DropDownListFor时,无法从@Html.DropDownListFor转换为“string”
EN

Stack Overflow用户
提问于 2020-06-03 06:26:17
回答 1查看 1.4K关注 0票数 0

我已经找到了许多关于相同问题的帖子,但没有一篇文章带有视图数据并与存储库连接。对于CountriesGender,我只需要使用一个类,而不是单独的类。

错误:

控制器

代码语言:javascript
复制
[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);
        }

代码语言:javascript
复制
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; }

视图

代码语言:javascript
复制
 <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>

仓库

代码语言:javascript
复制
[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;
        }]
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-03 11:11:15

您似乎同时尝试将两个数据源设置为DropDownList,即Model._CountriesListViewData["CountriesList"],这会导致构建错误。DropDownListFor没有这样的过载方法,您必须选择其中一个ViewBagModel

正如我正确理解的,您不需要使用_CountriesList_GenderList,所以只需删除Model._CountriesList,因为您使用的是ViewBag

代码语言:javascript
复制
<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的重载。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62166525

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档