让 DisplayFor(m => m.Property) 显示换行符和格式?

edi*_*ode 2 c# asp.net-mvc razor asp.net-mvc-3

我的视图有一个问题,因为当我使用TextAreaFor任何换行符或格式编辑某些内容时,我插入的内容都会被保存,并且当我编辑相同的元素时,它仍然会显示如下:

\n
\n

今年冬天需要一些东西让家人开心吗?或者正在寻找完美的圣诞礼物?你\xe2\x80\x99都可以在CD中找到,哇!

\n

通过此优惠,会员可以:

\n

\xe2\x80\xa2 搜索大量音乐、电影、电视、书籍和游戏。

\n

\xe2\x80\xa2 圣诞节期间将最新版本直接送到您家门口,全球免运费。

\n
\n

但是当我使用DisplayForor just时@Model.Property,它会显示如下:

\n
\n

今年冬天需要一些东西让家人开心吗?或者正在寻找完美的圣诞礼物?你\xe2\x80\x99都可以在CD中找到,哇!通过此优惠,会员可以: \xe2\x80\xa2 搜索大量音乐、电影、电视、书籍和游戏。\xe2\x80\xa2 圣诞节期间将最新版本直接送到您家门口,全球免运费。

\n
\n

我应该使用什么来以所示的格式显示它TextAreaFor

\n

Dar*_*rov 5

您可以使用<pre>标签:

<pre>
    @Html.DisplayFor(x => x.Property)
</pre>
Run Code Online (Sandbox Code Playgroud)

另一种可能性是编写一个自定义助手,它将\r\n用标签替换新行 ( )<br/>并像这样使用它:

@Html.DislpayFormattedFor(x => x.Property)
Run Code Online (Sandbox Code Playgroud)

以下是定义自定义助手的方法:

public static class HtmlExtensions
{
    public static IHtmlString DislpayFormattedFor<TModel>(
        this HtmlHelper<TModel> htmlHelper,
        Expression<Func<TModel, string>> expression
    )
    {
        var value = Convert.ToString(
            ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData).Model
        );
        if (string.IsNullOrEmpty(value))
        {
            return MvcHtmlString.Empty;
        }

        value = string.Join(
            "<br/>",
            value.Split(
                new[] { Environment.NewLine }, 
                StringSplitOptions.None
            ).Select(HttpUtility.HtmlEncode)
        );

        return new HtmlString(value);
    }
}
Run Code Online (Sandbox Code Playgroud)