繁体   English   中英

ASP.NET Core 2.1下拉列表为空

[英]ASP.NET Core 2.1 Dropdown empty

我有这个下拉菜单,其中应该包含项目列表

  1. 调试
  2. 信息
  3. 警告
  4. 危险

这是我获取清单的方式

public IEnumerable<string> GetLogLevels()
{
    var data = dbContext.EventLogs.Distinct().ToList();
    var modifiedData = data.Select(u => u.Level);
    return modifiedData;
}

这是我的控制器和viewmodel

public IActionResult Index()
{
    var levels = new SelectList(logsData.GetLogLevels(),"Level","Level");
    var llvm = new LevelsListViewModel
    {
        Levels = levels
    };
    return View(llvm);
}

public class LevelsListViewModel
{
    public SelectList Levels { get; set; }
}

这是我认为的方式

var level = "<div class='col-sm-3 search-spacing'><label for='Level'>Level</label><select asp-for='Level' asp-items='@Model.Levels'></select></div>";

现在的问题是由于某种原因它加载了一个空列表。 调试控制器时,可以看到自己的值。

在旁注中,这是获取一个字段并填充列表的正确方法吗? 我只想要一个独特的价值。

问题出在这一行:

var levels = new SelectList(logsData.GetLogLevels(),"Level","Level");

GetLogLevels方法返回一个string集合,该集合不包含Level属性。

有两种解决方法:

  • 更改GetLogLevels方法的返回类型,以便它返回具有Level属性的事件日志的集合; 要么
  • 使用SelectList类的其他构造方法 ,该构造方法仅接收对象的集合,而不指定值属性名称或文本属性名称,例如var levels = new SelectList(logsData.GetLogLevels());

这行引起问题,因为GetLogLevels()方法返回IEnumerable<string> ,该上下文在其上下文中没有名为Level属性:

var levels = new SelectList(logsData.GetLogLevels(),"Level","Level");

有一些解决方案可以解决此问题:

1)直接转换为IEnumerable<SelectListItem>

// Controller action
var levels = logsData.GetLogLevels().Select(x => new SelectListItem { Text = x, Value = x }).ToList();

// Model class
public class LevelsListViewModel
{
    public List<SelectListItem> Levels { get; set; }
}

2)对单个参数使用SelectList重载

var levels = new SelectList(logsData.GetLogLevels());

3)使用ToDictionary()

var levels = new SelectList(logsData.GetLogLevels().ToDictionary(), "Key", "Value");

注意:如果EventLogs包含多个列,则不能以这种方式使用Distinct() 您应该使用GroupBySelect第一个不同的值:

var data = dbContext.EventLogs.GroupBy(x => x.Level).Select(gr => gr.FirstOrDefault()).ToList();
return data;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM