2011-08-02 157 views
1

我只是不明白,为什么输出不正确显示如何删除换行符

这里是我的视图代码

@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,但输出被转义。

回答

1

建立它与StringBuilder及用途:

@Html.Raw(builder.ToString()) 

Html.Raw on MSDN

+0

最后我用你的代码,替换所有换行符。Thnaks – Luke101

2

视图引擎保留的换行符和空格创建HTML清晰。

我不明白为什么你希望他们被自动的删除,但简单的想法是不将它们插入摆在首位:

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

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

0

亨克在评论正确的想法,刚投入的字符串作为你想要它。

除非,你可以尝试使用更换。

document.write(mystring.Replace("\n",""); 
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());

+0

只是一个供参考,Html.Raw并创造IHtmlString的一个实例。创建它自己是没有必要的(你不要NE编辑MvcHtmlString作为MVC 3 ...新的HtmlString(yourStringBuilder.ToString());会工作得很好(但同样,这就是Html.Raw为你做的。 –

+0

谢谢,但我并没有说他可以在他的helper方法就可以了。在他看来返回IHtmlString,然后调用Html.Raw。它止跌“吨甚至编制。他可以创建HtmlHelper.Raw或新HtmlString()的IHtmlString。我觉得Html.Raw方法本身创建一个新的HtmlString() – Vasea