簡體   English   中英

asp.net mvc razor額外的空間

[英]asp.net mvc razor extra space

Razor在文本塊之間插入額外的空間。 我想以這種方式呈現一個列表:“1,2,3”但得到“1,2,3”。

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

有沒有辦法刪除這個額外的空間?

由於MVC 3 RTM +工具更新中的<text>標簽仍然存在問題,並且處理起來非常麻煩,因此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)
}

對於該示例而言,最后一個顯然是過度的,但對於更復雜的項和分隔符可能是有用的模式。

你可以使用@ Html.Raw。 代碼更易讀,輸出沒有額外的空格

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

相信 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>}
}

通過在asp.net網站關注這個帖子,有一個討論有類似的問題,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))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM