asp-validation-for="Privileges"
пытается найти свойство Privileges
в вашей модели (не ViewBag). Если его не существует, он выдаст вам эту ошибку. Эта строка эквивалентна ValidationMessageFor()
, и на самом деле в ядре .net нет эквивалента для ValidationMessage()
.
Посмотрите на asp-validation-for тег helper , который, как указано, должен совпадать с именем другого taghelper.
Как настроить asp-validation-for
со строковым значением, а не с выражением?
Опять же, нет эквивалента для ValidationMessage()
в TagHelpers. Так что вы можете просто использовать @Html.ValidationMessage()
.
https://docs.microsoft.com/en-us/aspnet/core/mvc/views/tag-helpers/intro?view=aspnetcore-2.2
важно понимать, что помощники тегов не заменяют помощники HTML, и для каждого помощника HTML нет помощника по тегам.
Вы также можете написать свой собственный помощник по тегам с помощью 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>
Надеюсь, это поможет.