此asp-validation-for="Privileges" 正在尝试在您的模型(而不是 ViewBag)中查找 Privileges 属性。如果它不存在,它会给你那个错误。该行相当于ValidationMessageFor(),并且afaik 在.net 核心中没有ValidationMessage() 的等价物。
查看 asp-validation-for tag helper,如上所述,它应该与另一个 taghelper 的名称一致。
如何使用字符串值而不是表达式设置asp-validation-for?
同样,在 TagHelpers 中没有 ValidationMessage() 的等价物。所以你可以使用@Html.ValidationMessage()。
https://docs.microsoft.com/en-us/aspnet/core/mvc/views/tag-helpers/intro?view=aspnetcore-2.2
重要的是要认识到 Tag Helper 不会取代 HTML Helper,并且每个 HTML Helper 都没有一个 Tag Helper。
您也可以使用 ValidationMessage HtmlHelper 编写自己的标签助手
文档中关于 ViewBags 的一些建议:
我们不建议将 ViewBag 或 ViewData 与 Select Tag Helper 一起使用。视图模型在提供 MVC 元数据方面更加健壮,并且通常问题较少。
更好的方法:
您需要将选定的权限添加到您希望返回的模型中。
public class CustomViewModel {
[Required]
public string Privilege { get; set; } // update if you want to return multiple privileges
public List<SelectListItem> PrivilegesMultiSelectList { get; set; }
}
然后在您的视图中使用它@model CustomViewModel。
在您的选择中使用asp-for="Privilege",它变为m => m.Privilege。
https://docs.microsoft.com/en-us/aspnet/core/mvc/views/working-with-forms?view=aspnetcore-2.2
asp-for 属性值是一种特殊情况,不需要
模型前缀,其他Tag Helper属性做的(如asp-items)
你可以这样写:
<select asp-for="Privilege" asp-items="@Model.PrivilegesMultiSelectList"></select>
<span asp-validation-for="Privilege" class="text-danger"></span>
我希望这会有所帮助。