输入的标签助手 [asp-for] 不适用于字节的数组值(与 @Html.HiddenFor 相反)

tag helper [asp-for] for the input doesn't work with byte's array values (opposite to @Html.HiddenFor)

@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[]"。

我想继续使用标签助手版本以保持一致性。如何启用字节数组序列化?

使用 type="hidden" 而不是 hidden 属性!

如果你这样做,你应该能够达到同样的目的

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

比较

原因(虽然我不是 100% 确定)

标签助手 asp-for 将尝试根据标签助手绑定到的 属性 类型为 HTML 输入生成类型,当您未指定 [= HTML 输入上的 14=] 属性。如果无法为 HTML 输入找到合适的类型,它将默认为 type="text".

这就是为什么您的 <input asp-for="RowVersion" hidden /> 会生成一个隐藏的文本框。标签助手在生成文本框时不清理输入值:

但是如果您指定 type="hidden" 并且您的 属性 类型是 byte[],它实际上会为您进行 Base64 编码:

这就是为什么 @Html.HiddenFor()<input type="hidden" asp-for= /> 有效而其他的没有!