输入的标签助手 [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= />
有效而其他的没有!
当 @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= />
有效而其他的没有!