我只是不明白为什么输出没有正确显示
这是我的观看代码
@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,但输出已转义。
答案 0 :(得分:2)
View Engine保留换行符和空格以创建清晰的HTML。
我不明白为什么你期望它们被自动删除,但简单的想法是不要首先插入它们:
document.write('<table> @foreach (var p in Model){<tr><td> ... }</table>');
现在这可能不会编译,只是一个基本的想法。 击>
它应该编译。只是一个丑陋的布局。
答案 1 :(得分:1)
答案 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());