2010-11-26 165 views
27

剃刀插入文本塊之間的額外空間。我想用這種方式呈現一個列表:「1,2,3」,但得到「1,2,3」。asp.net mvc剃鬚刀額外空間

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

有沒有什麼方法可以去除這個額外的空間?

回答

16

您可以使用@ Html.Raw。代碼是更具可讀性和輸出沒有多餘空格

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

Html.Raw在幫助器中不起作用,因爲這可以看到下面的答案。 – Case 2012-07-24 19:48:08

+0

@Case提到的答案可能是[Chris Toman的答案]的解決方案#4(http://stackoverflow.com/a/7237191/2615878)。 – Theophilus 2015-01-05 14:58:16

10

相信在ASP.NET Razor RC中存在一個問題,不幸的是,它將把「代碼上下文」中的空白視爲寫入響應的文字空白空間。

上面的例子是通過去除碼塊內的空白「固定」:

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

或者更整潔:

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

通過遵循該thread on the asp.net站點有其具有的討論類似的問題和安德魯護士的迴應

此錯誤已記錄,將 考慮用於RTM。

所以如果這同樣的問題,希望它使列表被修復。

這個錯誤並沒有使RTM

6

我可能會寫這樣一個自定義的助手:

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); 
19

由於這仍然是MVC 3 RTM +工具更新中的<text>標記的問題,因此它可以是b e真正令人頭疼的是,eddiegroves將代碼格式中的空格刪除的方法的替代方法是避免使用<text>標籤。

首先,這裏是能重現問題的原代碼的重寫和實際打印「1,2,3」:

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

這裏有四種選擇打印「1,2,3」,而不是的「1,2,3」,但通過使用@something而不是<text>保留代碼格式。

溶液#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) 
} 

對於這個例子來說,最後一個顯然是矯枉過正的,但對於更復雜的項目和分隔符可能是一個有用的模式。

0

下列任何一項應該工作,這取決於您的價值觀實際上是從哪裏來的:

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

我想刪除所有在一些研究後,我的解決方案如下,在HTML中額外的空間。

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

包住<文本>或<標籤> {}中,

可以在輔助函數使用,並將其與「格式文檔」功能很好地工作。

請確認您輸入的代碼塊,如果不換爲@ {}

代碼的某些元素(HTML,頭部,身體),你需要{<標籤> @ {} @ ** @ </tag>}

防止使用「格式文檔」功能後的換行添加。

@{ 
    {<!DOCTYPE html>} 
    {<html>@{ 
     {<head>@{ 
     {<link .../>} 
     }@**@</head>} 
     {<body>@{ 
     {<div>@{ 
      {<hr/>} 
     }</div>} 
     }@**@</body>} 
    }@**@</html>} 
} 

@model object 
@{ 
    // init 
}@{ 

}@section MainSection {@{ 
    {<div>@{ 
     {<hr/>} 
     {@Html.Partial("abc")} 
     Html.RenderPartial("abc"); 
     if ("razor" == "good") 
     { 
     for (var i = 1; i <= 10; i++) 
     { 
      Write("("); 
      {@i} 
      Write(" "); 
      {@<text>)</text>} 
     } 
     } 
    }</div>} 
}} 

希望它有幫助。