在 ASP.NET Core 中将模型绑定到 Select 时出错

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

我无法确定为什么这是错误的。

基本上,我有一个将数据传递到视图的视图模型。但是当我尝试使用 asp-items 标记帮助程序绑定它时出现错误。

查看模型如下所示:

using Microsoft.AspNetCore.Mvc.Rendering;
using NVFlexo.Models;

namespace NVFlexo.ViewModels;

public class ItemAndItemCategoriesViewModel
{
    public Item Item { get; set; }
    public IEnumerable<ItemCategory> ItemCategories { get; set; }
}

这是加载数据的控制器方法:

public IActionResult Create()
{
    ItemAndItemCategoriesViewModel itemAndItemCategories = new ItemAndItemCategoriesViewModel();
    itemAndItemCategories.ItemCategories = _itemCategoriesService.getAllCategories();
    return View(itemAndItemCategories);
}

视图相关部分如下:

@using NVFlexo.ViewModels;

@model ItemAndItemCategoriesViewModel;

@{
    ViewBag.Title = "Create New Item";
    Layout = "_Layout";
}

<form method="post">
...
<div class="mb-3">
   <label asp-for="Item.ItemCategory"></label>
   <select asp-for="Item.ItemCategoryId" class="form-control" asp-items="Model.ItemCategories"></select>
   <span asp-validation-for="Item.ItemCategory" class="text-danger"></span>
</div>
...
</form>

我收到此错误:

错误CS0266:无法隐式转换类型 'System.Collections.Generic.IEnumerable' 到 'System.Collections.Generic.IEnumerable'。 存在显式转换(您是否缺少转换?)

感谢任何帮助,因为我已经为此苦苦挣扎了大约两天。

c# asp.net-core asp.net-core-mvc
1个回答
0
投票

异常表明

Model.ItemCategories
属性不是
IEnumerable<Microsoft.AspNetCore.Mvc.Rendering.SelectListItem>

你可以使用

SelectList
:

<select asp-for="Item.ItemCategoryId" class="form-control" 
  asp-items="@(new SelectList(Model.ItemCategories, "ItemCategoryId", "ItemCategory"))">
</select>

或者,你可以改变

Model.ItemCategories

    public class ItemAndItemCategoriesViewModel
    {
        public Item Item { get; set; }
        public IEnumerable<SelectListItem> ItemCategories { get; set; }
    }

并像这样设置

ItemCategories

   var itemCategories = _itemCategoriesService.getAllCategories();
   itemAndItemCategories.ItemCategories = itemCategories.Select(i => 
     new SelectListItem { Value = i.ItemCategoryId, Text = i.ItemCategory });
© www.soinside.com 2019 - 2024. All rights reserved.