asp.net mvc razor额外的空间

Razor在文本块之间插入额外的空间。 我想以这种方式呈现一个列表:“1,2,3”但得到“1,2,3”。

@for (int i = 1; i < 3; i++) { @i if (i != 2) { ,  } } 

有没有办法删除这个额外的空间?

你可以使用@ Html.Raw。 代码更易读,输出没有额外的空格

 @for (int i = 1; i < 3; i++) { @Html.Raw(i) if (i != 2) { @Html.Raw(", ") } } 

由于这仍然是MVC 3 RTM +工具更新中的标签的问题,并且处理起来真的很头疼,eddiegroves从代码格式中删除空格的方法的替代方法是避免使用标签。

首先,这里是重写原始代码,重现问题并实际打印“1,2,3”:

  @for (int i = 1; i <= 3; i++) { @i if (i < 3) { ,  } } 

以下是打印“1,2,3”而不是“1,2,3”的四种选择,但使用@something而不是来保留代码格式。

解决方案#1:使用@(“”)

 @for (int i = 1; i <= 3; i++) { @i if (i < 3) { @(", ") } } 

解决方案#2:使用@var

 @for (int i = 1; i <= 3; i++) { var s = i < 3 ? ", " : null; @i @s } 

解决方案#3:使用@(表达式)

 @for (int i = 1; i <= 3; i++) { @i @(i < 3 ? ", " : null) } 

解决方案#4:使用@helpers

 @helper Item(int index) { @index } @helper Separator(int index, int count) { if (index < count) { @(", ") } } @for (int i = 1; i <= 3; i++) { @Item(i) @Separator(i, 3) } 

对于该示例而言,最后一个显然有点过分,但对于更复杂的项和分隔符可能是一个有用的模式。

相信 ASP.NET Razor RC中存在一个问题,遗憾的是它会将“代码上下文”中的空白视为文字空白来写入响应。

通过删除代码块中的空格来“修复”上面的示例:

 @for (int i = 1; i < 3; i++) { @iif (i != 2) { ,  } } 

或者更整洁:

 @for (int i = 1; i < 3; i++) { @iif(i != 2){, } } 

通过在asp.net网站上关注这个post,有一个讨论有类似的问题,Andrew Nurse回应

此错误已被记录,将被考虑用于RTM。

因此,如果这同一个问题,希望它能够修复列表。

这个bug没有成为RTM

我可能会为此写一个自定义助手:

 public static MvcHtmlString RenderNumbers(this HtmlHelper htmlHelper, int count) { var text = string.Join(", ", Enumerable.Range(1, count).ToArray()); return MvcHtmlString.Create(text); } 

然后在我的视图中使用它:

 @Html.RenderNumbers(3); 

以下任何一项都应该有效,具体取决于您的值实际来自何处:

 @string.Join(", ", myList) @string.Join(", ", 1, 2, 3) @string.Join(", ", Enumerable.Range(1, 3))