簡體   English   中英

無法從 'System.Collections.Generic.IEnumerable 轉換<system.web.mvc.selectlistitem>在將 ViewData 用於 @Html.DropDownListFor 時,將 ' 轉換為 'string'</system.web.mvc.selectlistitem>

[英]cannot convert from 'System.Collections.Generic.IEnumerable<System.Web.Mvc.SelectListItem>' to 'string' while using ViewData for @Html.DropDownListFor

我發現很多關於相同問題的帖子,但沒有一個是與視圖數據相關的並且與存儲庫相關聯。 我只需要使用一個 class 沒有單獨的 class 用於CountriesGender ,請。

錯誤:

在此處輸入圖像描述

Controller

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

Class

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

您似乎正在嘗試同時將兩個數據源設置為 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的重載

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM