控制器错误“Microsoft.AspNetCore.Mvc.Rendering.SelectListItem”中的MVC Core SelectList下拉列表

时间:2018-05-24 21:27:45

标签: c# asp.net-mvc asp.net-core

我想在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>

1 个答案:

答案 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对象列表。