如何在MVC 4中制作@ Html.DisplayFor多线

时间:2012-11-08 21:04:40

标签: asp.net-mvc visual-studio-2010 razor

我试图在多行中显示一个客户地址,该地址适用于@ Html.EditorFor但不适用于@ Html.DisplayFor。我在这里尝试过其他帖子,但还没有开始工作。 以下是我已经开始的事情以及我没有运气的尝试

@Html.DisplayFor(model => model.CustomerPostalAddress)
@Html.Raw(Html.Encode(Model.CustomerPostalAddress).Replace("\n","<br/>"))

这是模型中的字段

 [DataType(DataType.MultilineText)]
 public string CustomerPostalAddress { get; set; }

非常感谢任何帮助

3 个答案:

答案 0 :(得分:5)

你想在Views / Shared / DisplayTemplates / DisplayPostalAddr.cshtml中创建一个DisplayTemplate

@model string

<p>@Model</p>

然后给你模型提示如何显示它

[DataType(DataType.MultilineText)]
[UIHint("DisplayPostalAddr")]
public string CustomerPostalAddress { get; set; }

答案 1 :(得分:5)

只需添加此css样式属性即可呈现多行文本,这比使用服务器端字符串操作的cpu更好,例如.replace:

.multiline
{
   white-space: pre-wrap;
}

然后

<div class="multiline">
  my multiline
  text
</div>

这将呈现 br 元素之类的换行符

在此处尝试:http://refork.com/xaf4

答案 2 :(得分:0)

make DisplayFor display line breaks中所述,我为<td>USD {{amount| number: '1.2-2'}} </td> DataType.MultilineText覆盖(引入了)默认的DisplayTemplate,仅包含以下行:

/Views/Shared/DisplayTemplates/Multiline.cshtml

我猜想该模板会自动解析,因为我不需要<span style="white-space: pre-wrap">@this.Model</span> 或任何其他参考或注册。 (当然,如果愿意,您也可以引入一个CSS类,或在视图内部替换换行符。)

使用默认的DisplayTemplate将修复 all 属性的换行符,这些属性用(类型安全,有意义的)UIHint注释,而不只是用[DataType(DataType.MultilineText)]注释的属性