如何解决下拉列表MVC中的错误“ IEnumerable <SelectListItem>”

多迪

在我的MVC项目中,我将货币列表传递给下拉列表中的视图。但是,一旦尝试发布视图,就会得到以下异常:

密钥为'FromCurrencyId'的ViewData项的类型为'System.Int32',但必须为'IEnumerable'类型。

货币管制员

namespace Project.Controllers
{
    public class CurrencyController : Controller
    {
      [HttpGet]
        // GET: Currency
        public ActionResult Index()
        {

            CurrenciesClient Cur = new CurrenciesClient();
            var listCurrency = Cur.findAll().ToList();

            Currencies model = new Currencies();
            model.FromCurrencies = new SelectList(listCurrency, "Id", "CurrencyName");
            model.ToCurrencies = new SelectList(listCurrency, "Id",  "CurrencyName");

            return View(model);

        }

        [HttpPost]
        public ActionResult Index(Currencies cur)
        {


            if (ModelState.IsValid)
            {
                if (cur.FromCurrencyId == cur.ToCurrencyId)
                {
                    //do something if same currecnies and return.
                    ModelState.AddModelError("CurrencyCountry", "Can't make the conversion for the same value");
                }
                else
                {
                   some code .....
                }
            }

            return View(cur);

        }
    }
}

货币VM

namespace Project.ViewModels
{
    public class Currencies
    {
        public int Id { get; set; }
        [Required]
        public int FromCurrencyId { get; set; }
        public SelectList FromCurrencies { get; set; }

        [Required]
        public int ToCurrencyId { get; set; }
        public SelectList ToCurrencies { get; set; }

        public string CurrencyName { get; set; }

        public string CurrencyCountry { get; set; }


        [Required]
        public decimal ConversionRate { get; set; }

        public decimal Value { get; set; }

        public SelectList AvailableCurrencies { get; set; }


    }
}

CurrencyClient Web服务虚拟机

namespace Project.ViewModels
{
    public class CurrenciesClient 
    {
        private string base_Url = "http://localhost:51646/api/";

        public IEnumerable<Currencies> findAll()
        {
            try
            {
                HttpClient client = new HttpClient();
                client.BaseAddress = new Uri(base_Url);
                client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
                HttpResponseMessage response = client.GetAsync("currencies").Result;
                if (response.IsSuccessStatusCode)
                {
                    var resposeData = response.Content.ReadAsStringAsync().Result;
                    var Currency = JsonConvert.DeserializeObject<List<Currencies>>(resposeData);
                    return Currency;


                }
                return null;

            }
            catch
            {
                return null;
            }
        }
    }
}

索引检视

model Project.ViewModels.Currencies

@{
    ViewBag.Title = "Index";
}


@using (Html.BeginForm("Index", "Currency", FormMethod.Post))
{
    @Html.TextBoxFor(m => m.ConversionRate, new { @size = "5" })
    @Html.DropDownListFor(m => m.FromCurrencyId, Model.FromCurrencies as IEnumerable<SelectListItem>)
      @Html.DropDownListFor(m => m.ToCurrencyId, Model.ToCurrencies as IEnumerable<SelectListItem>)
        <button type="submit" class="btn btn-primary">Convert</button>
}
拉杰普特

之所以出现此问题,是因为您从下拉列表中传递了值。这意味着您没有选择任何值。检查是否可以从下拉列表中传递一些值,以便正常工作。要解决此问题,您需要添加相同的代码

Currencies model = new Currencies();
            model.FromCurrencies = new SelectList(listCurrency, "Id", "CurrencyName");
            model.ToCurrencies = new SelectList(listCurrency, "Id",  "CurrencyName");

在您的控制器索引发布方法中。因为如果selectListitem为null,则将执行以下代码

 IEnumerable<SelectListItem> selectList = o as IEnumerable<SelectListItem>;
if (selectList == null)
{
    throw new InvalidOperationException(String.Format(CultureInfo.CurrentCulture, 
        MvcResources.HtmlHelper_WrongSelectDataType,
        name, o.GetType().FullName, "IEnumerable<SelectListItem>"));
}

哪个会抛出异常。(最好使用

ViewBag.FromCurrencies = new SelectList(listCurrency, "Id", "CurrencyName");

像这样。)

更好的描述在这里给出:

具有键“ XXX”的ViewData项的类型为“ System.Int32”,但必须为类型“ IEnumerable <SelectListItem>”

在此链接中也给出了整个解释,例如该代码如何工作。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

没有类型为“ IEnumerable <SelectListItem>”的具有关键国家/地区的ViewData项目

如何将项目添加到IEnumerable SelectListItem

具有键“ XXX”的ViewData项的类型为“ System.String”,但必须为类型“ IEnumerable <SelectListItem>”

Post方法之后没有类型为“ IEnumerable <SelectListItem>”的ViewData项目,其键为“ DepartmentId”

ASP.NET Core MVC-无效的操作异常没有Ienumerable <SelectListItem>类型的viewdata

没有类型为“ IEnumerable <SelectListItem>”的ViewData项目,其键为“ MembershipTypesId”

没有类型为“ IEnumerable <SelectListItem>”的ViewData项目,其键为“ PestType”

没有类型为“ IEnumerable <SelectListItem>”的具有键“ Credit”的ViewData项目

如何将IEnumerable <SelectListItem>集合传递给MVC局部视图,每个请求仅进行一次数据库查找

将IDictionary <Guid,string>转换为IEnumerable <SelectListItem>

没有类型为“ IEnumerable <SelectListItem>”的ViewData项目,其键为“ CategoryID”

没有类型为IEnumerable <SelectListItem>'的ViewData项,其键为“ DCResults”

ASP.NET MVC-下拉列表-没有类型为“ IEnumerable <SelectListItem>”的ViewData项

没有类型为“ IEnumerable <SelectListItem>”的具有键“ Projects”的ViewData项目

从列表转换为SelectListItem

自定义模型和列表出现错误“ IEnumerable <SelectListItem>类型的ViewData项目不存在”

“没有类型为'IEnumerable <SelectListItem>'的ViewData项,其键为'Skip'

没有类型为“ IEnumerable <SelectListItem>”的ViewData项目,其键为“ CicekListesi”

没有类型为“ IEnumerable <SelectListItem>”的具有键“ SelectedCategoriesIds”的ViewData项目

无法将类型为“ System.Data.Entity.DbSet” [City]的对象转换为类型为“ System.Collections.Generic.IEnumerable`1 [System.Web.Mvc.SelectListItem]”的对象

没有类型为“ IEnumerable <SelectListItem>”的具有键“ ...”的ViewData项。

没有具有键“ddlcataglist”的“IEnumerable<SelectListItem>”类型的 ViewData 项

从 dbContext 获取 IEnumerable<SelectListItem>

如何没有具有键“Customer_id”的“IEnumerable<SelectListItem>”类型的 ViewData 项

DropDownListFor 不起作用。出现错误:“没有具有键 *key* 的‘IEnumerable<SelectListItem>’类型的 ViewData 项”

没有具有键“ddlcontent”的“IEnumerable<SelectListItem>”类型的 ViewData 项

.Net Core 3 Razor 页面 Admin/Product/Upsert.cshtml IEnumerable<SelectListItem> 错误

如何解決 ASP.NET MVC 中沒有“IEnumerable<SelectListItem>”類型的 ViewData 項?

如何获取 SelectListItem[] 的值