我想在MVC中创建一个SelectList下拉列表。
我更喜欢选择列表在存储库中,而不是在控制器中。 如何在不参考模型中字段名称的情况下调用存储库。我想要引用的只是存储库。
我收到此错误“Microsoft.AspNetCore.Mvc.Rendering.SelectListItem” 此资源尚无帮助: Why I am getting "System.Web.Mvc.SelectListItem" in my DropDownList?
我正在网上阅读很多例子,这是原始代码,
原始代码:
ViewData["ProductTypeId"] = new SelectList(_context.ProductType, "ProductName", "ProductDescription");
我试图让代码像这样工作:
收到错误:“Microsoft.AspNetCore.Mvc.Rendering.SelectListItem”
ViewData["ProductTypeId"] = new SelectList(_producttyperepository.GetAllLookupKey());
public IEnumerable<SelectListItem> GetAllLookupKey()
{
return (from ptin _context.ProductType pt
select new SelectListItem
{
Value = pt.ProductTypeName,
Text = pt.ProductDescription
});
}
<div class="form-group">
<label asp-for="ProductType" class="control-label"></label>
<select asp-for="ProductType" class="form-control" asp-items="ViewBag.ProductTypeId"></select>
<span asp-validation-for="ProductType" class="text-danger"></span>
</div>
答案 0 :(得分:0)
您当前的GetAllLookupKey
无法编译!使用此版本。
public IEnumerable<SelectListItem> GetAllLookupKey()
{
return _context.ProductType.Select( pt=>new SelectListItem
{
Value = pt.ProductTypeName,
Text = pt.ProductDescription
}).ToList();
}
此外,无需创建第二个SelectList
。您的GetAllLookupKey
方法会返回SelectListItem
的集合,您可以将其设置为ViewData。
ViewData["ProductTypeId"] = _producttyperepository.GetAllLookupKey();
SelectListItem
类在命名空间Microsoft.AspNetCore.Mvc.Rendering;
中定义。因此,请确保您的类中包含该命名空间的using语句。
using Microsoft.AspNetCore.Mvc.Rendering;
如果这个项目与拥有控制器的项目不同。确保您的项目具有对具有此命名空间的程序集的引用。类。
虽然这可能会解决我们的问题,但SelectListItem
是一个代表更多UI层关注的类。 恕我直言 ,您不应该让您的存储库返回。让您的存储库返回更多通用数据(例如:ProductType列表),并让您的UI层代码(控制器操作/ UI服务层等)从此ProductType列表生成SelectListItem对象列表。