2010-11-26 89 views
27

Razorは、テキストブロック間に余分なスペースを挿入します。私はこのようにリストをレンダリングしたい: "1,2,3"しかし、 "1,2,3"を得る。asp.net mvc razor余分なスペース

@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

+0

@Caseが言及している答えはおそらく[クリス・トーマンの答え](http://stackoverflow.com/a/7237191/2615878)のソリューション#4です。 – Theophilus

10

私は残念ながら応答への書き込みにリテラルホワイトスペースとして「コードコンテキスト」内の空白を扱いますASP.NETレイザー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サイト以下で同様の問題とAndrew Nurseが応答します

このバグはログに記録され、になりますは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実際の頭痛に対処するために、コードフォーマットから空白を取り除くeddiegrovesのアプローチに代わる方法は、<text>タグの使用を完全に避けることです。

まず、ここで問題を再現し、実際に「1、2、3」を印刷し、元のコードの書き直したものです。ここで

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

は、代わりに印刷し4つの選択肢「1、2、3」であり、 "1、2、3"の代わりに、<text>の代わりに@somethingを使用してコードの書式を保持します。

溶液#1:@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) 
} 
@( "")

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

溶液#2を使用して

ソリューション#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>} 
}} 

希望します。

+1

素晴らしい!これは実際に動作します – Luke

関連する問題