Альтернатива бритве Html.Raw () - PullRequest
6 голосов
/ 14 сентября 2011

У меня есть html, распечатанный в методе.Вот код:

@Html.Raw(Html.GenerateTabs())  //works -- but is inconvinent

На самом деле не хотел делать каждый метод, как этот.Вот как я хотел это сделать.Но это не работает.Когда я запускаю код, html печатает в браузере.

@Html.GenerateTabs()   //prints html in the broswer


<text>@Html.GenerateTabs()</text>  //prints html in the broswer

Есть ли способ сделать это безопасным для бритвы?

Ответы [ 4 ]

11 голосов
/ 14 сентября 2011

Если ваш код выводит MvcHtmlString вместо строки, он будет правильно выводиться с содержащимся в нем HTML.

Вы создаете MvcHtmlString с использованием статического фабричного метода из строки с HTML.

public MvcHtmlString OutputHtml() {
    return MvcHtmlString.Create("<div>My div</div>");
}

тогда в поле зрения:

@OutputHtml()
2 голосов
/ 14 сентября 2011

Razor кодирует по умолчанию. До сих пор я не нашел на уровне просмотра или уровне приложения его отключения.

Может сделать расширение?

    public static MvcHtmlString RawHtml(this string original)
    {
        return MvcHtmlString.Create(original);
    }

...

@Html.GenerateTabs().RawHtml();
1 голос
/ 14 сентября 2011

Возможно, вы захотите создать помощника в папке App_Code.Код там скомпилирован и доступен для всех видов бритвы.

Добавьте файл скажем SiteHelper.cshtml и добавьте туда вспомогательный метод

@helper GenerateTabs()
{
   <div>blah</div>
}

Затем используйте его в любом виде бритвы.как

@SiteHelper.GenerateTabs()
1 голос
/ 14 сентября 2011

Просто заставьте ваши GenerateTabs возвращать MvcHtmlString.

Он похож на другой пост здесь, но зачем использовать другой метод для вывода необработанного html, а не просто указывать Html.Raw.То есть я не защищаю другой метод, как это было сделано ниже, но просто гарантирую, что ваш GenerateTabs возвращает MvcHtmlString.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...