none
Html.DisplayText перестал правильно работать в MVC 5.2 RRS feed

  • Вопрос

  • После того как проекте обновил версию MVC с 5.1  на MVC 5.2. Хелпер DisplayText перестал отображать нтмл текст. Он выдает текст с тегами.
    17 июля 2014 г. 23:15

Ответы

  • Посмотрел, в версии 5.1 этого не было. Значит добавили, выходит что фича. А если в целом подумать, то это правильно. Так как предотвращает атаки XSS. А если хотите выводить явно сырой HTML, то вышеуказанный метод к вашим услугам. Вот только времени нет посмотреть исходники детально. Возможно вот это

    if (metadata.HtmlEncode)
            str = html.Encode(str);

    можно контролировать (кодировать строку или нет) откуда то. Возможно через атрибут (в свойстве модели например) или ещё где. Или может это на будущее.


    Сделаем содержимое сообщества лучше, вместе!

    Да Вы правы, для того чтобы не происходил Encode, в модели надо для свойтсва поставить атрибут   DisplayFormat и свойству HtmlEncode присвоить значение false

    • Помечено в качестве ответа Grygorii 23 июля 2014 г. 15:53
    23 июля 2014 г. 15:53

Все ответы

  • Используйте Html.Raw()
    18 июля 2014 г. 5:34
  • Да есть такое, теперь Html кодируется в данном элементе.

    private static MvcHtmlString DisplayTextHelper(HtmlHelper html, ModelMetadata metadata)
        {
          string str = metadata.SimpleDisplayText;
          if (metadata.HtmlEncode)
            str = html.Encode(str);
          return MvcHtmlString.Create(str);
        }

    Используйте предложенный вариант выше.


    Сделаем содержимое сообщества лучше, вместе!

    18 июля 2014 г. 6:42
    Модератор
  • Это баг или фича? Просто с справочнике нечего не поменялось.
    18 июля 2014 г. 12:24
  • Посмотрел, в версии 5.1 этого не было. Значит добавили, выходит что фича. А если в целом подумать, то это правильно. Так как предотвращает атаки XSS. А если хотите выводить явно сырой HTML, то вышеуказанный метод к вашим услугам. Вот только времени нет посмотреть исходники детально. Возможно вот это

    if (metadata.HtmlEncode)
            str = html.Encode(str);

    можно контролировать (кодировать строку или нет) откуда то. Возможно через атрибут (в свойстве модели например) или ещё где. Или может это на будущее.


    Сделаем содержимое сообщества лучше, вместе!

    18 июля 2014 г. 12:43
    Модератор
  • Посмотрел, в версии 5.1 этого не было. Значит добавили, выходит что фича. А если в целом подумать, то это правильно. Так как предотвращает атаки XSS. А если хотите выводить явно сырой HTML, то вышеуказанный метод к вашим услугам. Вот только времени нет посмотреть исходники детально. Возможно вот это

    if (metadata.HtmlEncode)
            str = html.Encode(str);

    можно контролировать (кодировать строку или нет) откуда то. Возможно через атрибут (в свойстве модели например) или ещё где. Или может это на будущее.


    Сделаем содержимое сообщества лучше, вместе!

    Да Вы правы, для того чтобы не происходил Encode, в модели надо для свойтсва поставить атрибут   DisplayFormat и свойству HtmlEncode присвоить значение false

    • Помечено в качестве ответа Grygorii 23 июля 2014 г. 15:53
    23 июля 2014 г. 15:53