输入的tag helper [asp-for]不适用于byte的数组值(与@ Html.HiddenFor相反)

问题描述 投票:0回答:1

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

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

c# asp.net-core asp.net-core-2.0 tag-helpers asp.net-core-tag-helpers
1个回答
1
投票

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

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

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

Comparison

enter image description here enter image description here

The reason (I am not 100% sure though)

当您未在HTML输入上指定asp-for属性时,标记帮助程序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= />工作,但其他人没有!

© www.soinside.com 2019 - 2024. All rights reserved.