在一个文本中强制使用新行

时间:2014-01-07 21:39:29

标签: javascript html asp.net css

我一直在寻找约20分钟,但没有回答这个问题。我非常感谢任何人对此的意见。

我在表格行中有一个单元格(td),并且该单元格大部分时间都包含一行文本,但偶尔会包含两行(它包含的确切文本取决于服务器端处理) 。如果将一行的文本组合在一起并且包裹起来,我并不介意,但如果添加第二行,我需要能够开始一个新行。因此我尝试使用下面的换行符。

我无法将其分解为两个<td>元素,当我将它们包含在文本服务器中时,我似乎无法使\n<br/>工作 - 侧。如果我这样做,它们只是在单元格内呈现为纯文本。

基本上,我希望能够避免使用javascript客户端分析文本来添加特殊字符。我甚至不确定这是否有效。是否有一些css / html / javascript / jquery技巧可以完成这项工作?

构建文本的C#代码很简单,这是一个例子:

    caseDueDate = "Reading Response due: " + readingDueDate.ToString();

该字段的Razor代码如下所示:

    <td>@Model.patients.ElementAt(ii).CaseDue</td>

回归结果的正确性很好。 T'只是格式化... =)

3 个答案:

答案 0 :(得分:1)

在您的代码中的某些时刻,某些内容正在将您的<br />标记转换为htmlentities,因为这些标记不应在html输出中呈现为纯文本。

您的输出是否包含在htmlentities()来电或类似内容中?

答案 1 :(得分:1)

带有TD的BR标签应该可以工作......服务器端代码可能会自动转义html以防止跨站点脚本。根据所使用的特定服务器软件,有多种方法可以选择性地禁用它。

答案 2 :(得分:1)

你在服务器上使用ASP.NET MVC,对吗?

如果您想在服务器端手动控制换行符的使用,可以考虑两个选项:

(1)您可以为CaseDue属性编写显示模板(部分视图)。如果使用UIHint属性标记模型,请执行以下操作:

[UIHint("MyPartialView")]
public string CaseDue { ... }

...然后在您的视图中使用HtmlHelper,例如:

@Html.DisplayFor(m => m.patients.ElementAt(index).CaseDue)

(2)你可以为HtmlHelper类编写一个扩展方法,它创建并返回一个MvcHtmlString实例。 Razor不对这些进行编码,因此您可以在返回值中包含所需的任何标记。例如,大致:

public static MvcHtmlString TdForCaseDue(this HtmlHelper html, string[] lines) {
    TagBuilder td = new TagBuilder("td");
    td.InnerHtml = lines[0];
    for(int i = 1; i < lines.Length; i++) {
        td.InnerHtml += (new TagBuilder("br").ToString());
        td.InnerHtml += lines[i];
    }
    return new MvcHtmlString(td.ToString());
}