簡體   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