помощник по тегам [asp-for] для ввода не работает со значениями массива байтов (в отличие от @ Html.HiddenFor) - PullRequest
0 голосов
/ 02 мая 2019

Когда @Html.HiddenFor(e=>e.RowVersion) работает хорошо и генерирует:

<input id="RowVersion" name="RowVersion" type="hidden" value="AAAAAAAARlI=" /> 

Но версия помощника тега <input asp-for="@Model.RowVersion" name="RowVersion" hidden /> генерирует:

<input name="RowVersion" hidden id="RowVersion" value="System.Byte[]" />

Проблема в том, что существует сумасшедшее значение "System.Byte [] ".

Я хочу продолжать использовать версию помощника тега для согласованности.Как включить сериализацию байтового массива?

1 Ответ

1 голос
/ 02 мая 2019

Используйте type="hidden" вместо hidden атрибута!

Вы сможете добиться того же, если сделаете

/*
 *   From the ViewModel:
 *       byte[] RowVersion = Encoding.UTF8.GetBytes("FR")
 */
<input asp-for="RowVersion" type="hidden" />

Сравнение

enter image description here enter image description here

Причина (хотя я не уверен на 100%)

Помощник по тегам asp-for попытается сгенерировать типдля ввода HTML, основанного на типе свойства, к которому привязывается помощник по тегам, если вы не указали атрибут type во вводе HTML.Если он не может найти правильный тип для ввода HTML, он по умолчанию будет type="text".

Вот почему ваш <input asp-for="RowVersion" hidden /> сгенерирует скрытое текстовое поле.Помощник по тегам не очищает входное значение при создании текстового поля:

enter image description here

Но если вы укажете type="hidden" и ваш тип свойства будет byte[],он на самом деле сделает для вас кодировку Base64:

enter image description here

Вот почему @Html.HiddenFor() и <input type="hidden" asp-for= /> работали, а другие - нет!

...