2015-07-30 2 views
1

У меня есть html-помощник для скрытого поля. Он привязан к байту [], и у меня нет проблем, так как он корректно отображает результат. Но вместо вспомогательной функции, если я использую тэг 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; } 

Игнорирование имен и идентификаторов элемента управления (это просто воспроизвести проблему), после это 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, или проблема связана с тем, как должно отображаться значение модели.

+0

попытались преобразования значения ConcurrencyCheck в строку? Похоже, браузер не может интерпретировать это неявно и просто записывать его тип, тогда как при использовании механизма mvc для его решения он неявно преобразует значение –

+0

да, что дало мне тот же результат –

+0

, как вы попытаться его преобразовать? потому что в вашем цикле model.pathToImages тип var. и @ path.ConcurrencyCheck находится в html, поэтому он не разрешен движком. возможно, если вы моделируете свойство getter, возвращаемое строковое значение, а не только значение по умолчанию, оно может работать. –

ответ

1

Это потому, что byte[] является сложным массивом и нуждается в преобразовании в Base64String. Метод Html.HiddenFor() учитывает это, но @path.ConcurrencyCheck не использует и использует метод значения свойства для генерации вывода.

Вы можете просмотреть 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); 
    } 
    .... 
+0

спасибо Stephen –

Смежные вопросы