ASP.NET MVC Razor渲染了额外的空白

时间:2011-07-11 15:25:56

标签: asp.net-mvc razor

在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>
  }
}

有没有办法删除额外的空格?

5 个答案:

答案 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)。

使用StringBuilderstring.Join是解决此问题的方法,如果您所做的只是输出这三个数字。但是,如果您正在尝试执行其他操作,这是一个简化示例,那么see this blog post可以使用ol/ulli来实现此目的。

答案 4 :(得分:-3)

我可能会认为它不是Razor的问题,而是以一些边缘呈现元素。

  1. 打开FireBug(或Chrome或其他)并发现它确实是标记问题。
  2. 在你的css文件中尝试添加
  3.   

    text {margin:0}