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>
}
}
この余分なスペースを削除する方法はありますか?
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>
}
}
この余分なスペースを削除する方法はありますか?
@ Html.Rawを使用できます。コードが読みやすくなり、出力は余分な空白に
@for (int i = 1; i < 3; i++)
{
@Html.Raw(i)
if (i != 2)
{
@Html.Raw(", ")
}
}
私は残念ながら応答への書き込みにリテラルホワイトスペースとして「コードコンテキスト」内の空白を扱います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
は、私はおそらく、このためのカスタムヘルパー書くとしませんでした:
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);
これはまだ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)
}
最後の例は明らかにこの例では残念ですが、より複雑な項目や区切り記号には便利なパターンかもしれません。
を持っていない、次のいずれかが動作するはずです、自分の価値観が実際にどこから来たに応じて:
@string.Join(", ", myList)
@string.Join(", ", 1, 2, 3)
@string.Join(", ", Enumerable.Range(1, 3))
私はすべて削除したいですいくつかの研究の後、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>}
}}
希望します。
素晴らしい!これは実際に動作します – Luke
Html.Rawはヘルパー内では機能しません。下の回答を参照してください。 – Case
@Caseが言及している答えはおそらく[クリス・トーマンの答え](http://stackoverflow.com/a/7237191/2615878)のソリューション#4です。 – Theophilus