Давайте рассмотрим ваш метод действий на сервере:
public async Task<IActionResult> Create([Bind("StatusId,CNPJ,Name,BusinessName,State,City,Street,District,CEP,Observation,Phone,Cellphone,Email,Status")] Company company)
{}
Здесь модель компании ожидает поля StatusId
, Status
и т. Д.
Тем не менее, input
TagHelper на стороне сервера
<input type="text" value="" class="mdl-textfield__input" id="statusList" asp-for="Status" readonly>
<input type="hidden" value="" name="statusList" asp-for="StatusId">
будет отображаться в HTML-тегах, как показано ниже, в браузере:
<input type="text" value="" class="mdl-textfield__input" id="statusList" readonly="" name="Status">
<input type="hidden" value="" name="statusList" data-val="true" data-val-required="The StatusId field is required." id="StatusId">
Обратите внимание, что при визуализации в браузере атрибут name
скрытого элемента <input>
равен statusList
вместо statusId
.
Причина в том, что ваше свойство name
TagHelper input
на стороне сервера переопределяет атрибут, сгенерированный атрибутом name
, свойством asp-for
.
В результате полезная нагрузка, которую вы отправляете на сервер, будет:
Status=your-status-name&statusList=1&__RequestVerificationToken=xxx
Поскольку сервер не заботится о поле statusList
, он просто игнорирует его.
Я не уверен, как ваши Material Design Lite и клиентские скрипты привязывают значение к input#statusId
, когда пользователь выбирает <ul>/<li>
. Но если вы хотите отправить запрос через форму, вы должны изменить свой код просмотра с:
<input type="hidden" value="" name="statusList" asp-for="StatusId">
будет:
<input type="hidden" value="" asp-for="StatusId">