我有一个用于隐藏字段的html帮助器方法。它绑定到一个byte [],我没有问题,因为它正确显示了结果。但是,如果我使用html标签,则不会显示辅助函数,而不会显示正确的值。而是显示其类型。
以下代码和图像将阐明我要说的话。
HTML代码:
foreach (var path in Model.PathToImages)
{
<div class="form-group">
<div class="col-sm-6" style="vertical-align:central;">
<input type="button" value="Delete" class="btn btn-primary delete-property" name="@path.ImagePath" />
@Html.HiddenFor(m => path.ConcurrencyCheck)
<input id="@path.ImagePath" name="@path.ImagePath" type="hidden" value="@path.ConcurrencyCheck">
</div>
</div>
}
我模型中的属性:
public byte[] ConcurrencyCheck { get; set; }
忽略控件的名称和ID(这只是为了重现问题),以下是生成的html:
现在,如图像所示,当我使用@Html.HiddenFor(m => path.ConcurrencyCheck)
该值时会正确显示,但是当我使用<input id="@path.ImagePath" name="@path.ImagePath" type="hidden" value="@path.ConcurrencyCheck">
该值时,类型为System.Byte []。
那么,为什么在使用html输入标签时我没有得到值,或者问题出在应该显示模型值的方式上。
这是因为它byte[]
是一个复杂的数组,需要转换为Base64String
。该Html.HiddenFor()
方法考虑到了这@path.ConcurrencyCheck
一点,但未考虑在内,并且正在使用.ToString()
属性值的方法来生成输出。
private static MvcHtmlString HiddenHelper(HtmlHelper htmlHelper, ModelMetadata metadata, object value, bool useViewData, string expression, IDictionary<string, object> htmlAttributes)
{
....
byte[] byteArrayValue = value as byte[];
if (byteArrayValue != null)
{
value = Convert.ToBase64String(byteArrayValue);
}
....
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句