如何删除换行符

时间:2011-08-02 20:31:59

标签: c# javascript asp.net-mvc-3 razor

我只是不明白为什么输出没有正确显示

这是我的观看代码

@model IEnumerable<TheSite.Post>
@{
    ViewBag.Title = "Index";
    Layout = null;
}
document.write('<table>

@foreach (var p in Model)
{
    <tr>
        <td>
            <a href="@p.Url">@p.Title</a>
        </td>
    </tr>
}

</table>');

这是输出:

document.write('<table>

    <tr>
        <td>
            <a href="http://www.test.com">test</a>
        </td>
    </tr>

</table>');

这是我需要的输出:

document.write('<table><tr><td><a href="http://www.test.com">test</a></td></tr></table>');

我尝试使用stringbuilder,但输出已转义。

4 个答案:

答案 0 :(得分:2)

View Engine保留换行符和空格以创建清晰的HTML。

我不明白为什么你期望它们被自动删除,但简单的想法是不要首先插入它们:

  document.write('<table> @foreach (var p in Model){<tr><td> ... }</table>');

现在这可能不会编译,只是一个基本的想法。
它应该编译。只是一个丑陋的布局。

答案 1 :(得分:1)

使用StringBuilder构建它并使用:

@Html.Raw(builder.ToString())

Html.Raw on MSDN

答案 2 :(得分:0)

Henk在评论中有正确的想法,只需按照您的意愿输入字符串。

除此之外,您可以尝试使用替换。

document.write(mystring.Replace("\n","");

答案 3 :(得分:0)

您可以将stringbuilder与@Html.Raw()一起使用,以避免转义html字符。 您可以在每个html行上添加“\”字符以逃避js中的新行,但我不建议这样做。相反,我会使用“+”

document.write('<table>' + 
 @foreach (var m in Model) {
   '<tr><td>@m</td></tr>'
 }
 + '</table>');

或者您可以编写一个帮助方法,它将返回IHtmlString的实例(类似于return new HtmlString(yourStringBuilder.ToString());