我无法确定为什么这是错误的。
基本上,我有一个将数据传递到视图的视图模型。但是当我尝试使用 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 '。 存在显式转换(您是否缺少转换?)
感谢任何帮助,因为我已经为此苦苦挣扎了大约两天。
异常表明
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 });