Полужирный текст в Html.FormatValue с использованием Razor

Я хочу получить следующий результат. Имя пользователя должно быть выделено жирным шрифтом:

Blabla Имя пользователя Bla.

У меня есть Формат в файле ресурсов:

Blabla {0} Bla.

И в представлении я делаю следующее:

@Html.FormatValue(User.Identity.Name, Resources.MyFormatString)

Как я могу сделать имя пользователя жирным шрифтом и использовать Html.FormatValue? Или есть другой способ добиться этого?

2 ответа

Решение

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

подобно "Blabla <b>{0}</b> Bla.".

[редактировать]
Действительно, проверил Html.FormatValue на функциональность escape, не видел ни одного, но, видимо, это так:)

В этом случае с помощью @Html.Raw а также string.Format буду работать.

@Html.Raw(string.Format(Resources.MyFormatString, "SomeName"))

(проверено в MVC 5, но @Html.Raw также доступно в 4)

Также небольшое замечание: хранение HTML в ресурсах, вероятно, не лучшая идея, смешивая пользовательский интерфейс и контент.
[/редактировать]

Я хотел решить ваш пример с использованием HTML-тегов, быть уверенным с HTML-символами в ресурсах и безопасно включать пользовательский ввод или HTML-теги. Мое решение вашего примера

@(Resources.MyFormatString.FormatWithHtml(
    "<b>" + HttpUtility.HtmlEncode(User.Identity.Name) + "</b>"))

используя мою функцию FormatWithHtml

/// Encodes to MvcHtmlString and includes HTML tags or already encoded strings, placeholder is the '|' character
public static MvcHtmlString FormatWithHtml (this string format, params string[] htmlIncludes) 
{
    var result = new StringBuilder();
    int i = -1;
    foreach(string part in format.Split('|')) {
        result.Append(HttpUtility.HtmlEncode(part));
        if (++i < htmlIncludes.Length)
            result.Append(htmlIncludes[i]);
    }
    return new MvcHtmlString(result.ToString());
}

Еще один пример, это

@("Resource is safe to html characters <&> and will include |format tags| or any | user input."
    .FormatWithHtml("<b>", "</b>", "<b id='FromUser'>" +HttpUtility.HtmlEncode("<a href='crack.me'>click</a>") +"</b>"))

напишу на вашу страницу бритвы

Ресурс безопасен для HTML-символов <&> и будет включать теги формата или любой щелчок пользовательского ввода.

Другие вопросы по тегам