在Asp.net MVC中,Razor在文本块之间插入了额外的空间。我想以这种方式呈现一个列表:“1,2,3”,但得到“1,2,3”。
@for (int i = 1; i < 3; i++)
{
<text>@i</text>
if (i != 2)
{
<text>, </text>
}
}
有没有办法删除额外的空格?
答案 0 :(得分:7)
您看到数字和逗号之间有额外的空格,因为您的剃刀模板在数字和逗号之间包含换行符(在浏览器中显示为空格):
@for (int i = 1; i < 3; i++)
{
<text>@i</text> >LINE BREAK HERE<
if (i != 2)
{
<text>, </text>
}
}
我喜欢Darin's answer,我建议删除你的循环并用更具说明性的语句替换它,但是如果你不想那么远,请尝试至少删除换行符:
@for (int i = 1; i < 3; i++)
{
<text>@i</text>if (i != 2){<text>, </text>}
}
答案 1 :(得分:6)
我想以这种方式呈现一个列表:“1,2,3”
又快又脏:
@string.Join(", ", Enumerable.Range(1, 3))
显然,自定义帮助程序似乎更适合在视图中格式化某些内容的工作:
public static class HtmlExtensions
{
public static IHtmlString FormatList(this HtmlHelper html, IEnumerable<int> list)
{
return MvcHtmlString.Create(string.Join(", ", list));
}
}
然后简单地说:
@Html.FormatList(Model.MyList)
答案 2 :(得分:1)
您可以在StringBuilder
中累积所有文本,然后在循环外部@stringBuilderObject.ToString()
累积,而不是在循环中每次都在不同位置写出文本位。
答案 3 :(得分:0)
问题在于生成的源。当你看到实际来源时:
1 , 2 , 3
正如您所看到的,那里有很多空白区域,浏览器会崩溃到一个空格(请查看definition for normal)。
使用StringBuilder
或string.Join
是解决此问题的方法,如果您所做的只是输出这三个数字。但是,如果您正在尝试执行其他操作,这是一个简化示例,那么see this blog post可以使用ol/ul
和li
来实现此目的。
答案 4 :(得分:-3)
我可能会认为它不是Razor的问题,而是以一些边缘呈现元素。
text {margin:0}