Я изменил свойство Username на Email, и теперь оно начало работать ?! Почему имя этих свойств влияет на то, могут ли им присваиваться значения?!?!
Во-первых, вам нужно знать, что для каждого свойства сложного типа привязка модели просматривает источники для имени узор prefix.property_name
. Если ничего не найдено, ищется только property_name
без префикса.
Ссылка:
https://docs.microsoft.com/en-us/aspnet/core/mvc/models/model-binding?view=aspnetcore-3.1#complex -типы
Тогда вам нужно знайте, что помощник тега asp-for
по умолчанию сгенерирует html, как показано ниже:
<input id="LoginDTO_Username" name="LoginDTO.Username">
Но вы добавляете свойство name
к элементу ввода, чтобы он переопределил свойство name
, он отобразит html, как показано ниже:
<input id="LoginDTO_Username" name="email">
Таким образом, система привязки модели не смогла найти источник username
. Вот почему она может работать после того, как вы измените свойство Username
на Email
.
Для вашего сценария, если вы не хотите изменять имя свойства модели, вы можете изменить, как показано ниже:
<input class="form-control" type="email" name="username" placeholder="Email" asp-for="LoginDTO.Username">
Или просто используя помощник тега asp-for
:
<div class="form-group">
<input class="form-control" type="email" placeholder="Email" asp-for="LoginDTO.Username">
</div>
<div class="form-group">
<input class="form-control" type="password" placeholder="Password" asp-for="LoginDTO.Password">
</div>