Html中的粗体文本.使用Razor的FormatValue

本文关键字:使用 Razor 文本 FormatValue Html | 更新日期: 2023-09-27 18:08:58

我想要得到以下结果。用户名必须加粗:

Blabla Username Bla.

我有一个资源文件的格式:

Blabla {0} Blabla .

在视图中,我做了以下操作:

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

如何使Username加粗并使用Html.FormatValue?或者是否有其他方法可以实现这一点?

Html中的粗体文本.使用Razor的FormatValue

您可以简单地更改您的资源,以包含粗体标记,强标记或样式。

Like "Blabla <b>{0}</b> Bla.".

[编辑]
的确,选中了Html。FormatValue的转义功能,没有看到一个,但显然有:)

在这种情况下,使用@Html.Rawstring.Format将工作。

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

(在MVC 5中测试,但@Html.Raw也可在4中使用)

还有一个小提示:将HTML存储在资源中可能不是最好的主意,混合UI &内容。
(/编辑)

我想解决你的例子,包括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字符是安全的<&>并将包括格式标签或任何click用户输入。