使用html标记时,byte []值不正确

时间:2015-07-30 13:30:35

标签: html asp.net-mvc

我有一个隐藏字段的html辅助方法。它绑定到一个byte [],我没有问题,因为它正确显示结果。但是如果我使用html标记而不是辅助函数,则不会显示正确的值。而是显示其类型。

以下代码和图片将阐明我想说的内容。

HTML code:

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:

enter image description here

现在,当图像显示我使用@Html.HiddenFor(m => path.ConcurrencyCheck)时,值正确显示但是当我使用<input id="@path.ImagePath" name="@path.ImagePath" type="hidden" value="@path.ConcurrencyCheck">时,值为System.Byte []类型。

那么为什么我在使用html输入标签时没有获得该值,或者问题在于应该显示模型值的方式。

1 个答案:

答案 0 :(得分:1)

这是因为byte[]是一个复杂的数组,需要转换为Base64StringHtml.HiddenFor()方法考虑到了这一点,但@path.ConcurrencyCheck没有,并且正在使用属性值的.ToString()方法来生成输出。

您可以查看source code here,但相关的代码行是

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);
    }
    ....