По вашему мнению, вы ссылались на несуществующее свойство формы, отсюда и ошибка.
В первой строке вашего представления вы объявили модель типа ApplicationRoleModel
, а в своей форме вы объявили вход для свойства Name, которого нет в этой модели.
Чтобы решить эту проблему, вы можете добавить свойство Name
к ApplicationRoleModel
, хотя я бы использовал NewRoleName
для большей ясности:
public class ApplicationRoleModel : ClaimsToRoleModel
{
[BindNever] // BindNever is to avoid model-binding security issues
public IEnumerable<ApplicationRole> RoleList { get; set; }
[Required]
[Display(Name="Name" )] // This will be displayed in the `<label asp-for>` element
public String NewRoleName { get; }
}
В вашем cshtml:
<div class="form-group">
<label asp-for="Name" />
<input asp-for="Name" class="form-control" />
</div>
Если вы хотите разрешить редактирование нескольких элементов, измените модель представления на List<T>
вместо IEnumerable<T>
и используйте цикл for( Int32 i = 0; i < list.Count; i++ )
(для этого нельзя использовать foreach
), например так:
public class NewRoleViewModel
{
//[Required] // no-longer required so that users can submit empty lists
[Display(Name="Name" )]
public String NewRoleName { get; set; }
}
public class ApplicationRoleModel : ClaimsToRoleModel
{
[BindNever] // BindNever is to avoid model-binding security issues
public IEnumerable<ApplicationRole> RoleList { get; set; }
[Required]
public List<NewRoleViewModel> NewRoles { get; } = new List<NewRoleViewModel>();
}
В вашем cshtml:
@for( Int32 i = 0; i < this.Model.NewRoles.Count; i++ ) {
<div class="form-group">
<label asp-for="NewRoles[i].Name" />
<input asp-for="NewRoles[i].Name" class="form-control" />
</div>
}
Обратите внимание, что список NewRoles
по умолчанию будет пустым, вам необходимо добавить несколько пустых записей в метод действия вашего контроллера:
public IActionResult Index()
{
ApplicationRoleModel vm = new ApplicationRoleModel();
vm.NewRoles.Add( new NewRoleViewModel() );
vm.NewRoles.Add( new NewRoleViewModel() );
vm.NewRoles.Add( new NewRoleViewModel() );
return this.View( vm );
}