Полужирный текст в 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-символов <&> и будет включать теги формата или любой щелчок пользовательского ввода.