5

<text>Razorタグが書式設定規則に従うことを拒否していることに気付きました。たとえば、cshtmlドキュメントをフォーマットすると、次のようなコードになります。

@MyHelper.MyMethod(@<div>
    <p>Hello world</p>
</div>)

@MyHelper.MyMethod(@<text>
<p>Hello world</p>
</text>)

これは Razor テンプレート関数に固有のものではないことに注意してください<text>。ブロックはどこでも同じことを行います。

などのクライアント HTML タグ (およびそのコンテンツ)<div>は、指定した書式設定スタイルに従いますが、要素をどこに追加 (または削除) しても効果はありません。望ましい結果は、要素のコンテンツが前の例の要素のコンテンツのようにフォーマットされることです。<text>Tag Specific Options...<text><div>

<text>他のブロック レベルのクライアント HTML 要素 ( 、 など) と同じ書式スタイルを要素<div><section>適用するためのトリックや回避策はありますか?

herehereなど、Razor 言語でこのようなフォーマットの問題が他にも見られたので、これには前例がないわけではなく、解決策がない可能性が高いと思われます。いずれにせよ、誰かが修正に遭遇した可能性があります。

これは、VS 2010 で構築された Razor 2.X Web サイトです。


補遺
私はこれにうんざりしています。

おそらく、この問題は 2012 年に解決されました。わからない、更新していません。ただし、<text>ブロック、@プレフィックス付きブロックなどは適切にフォーマットされません。

別の例として、今回は接頭辞付きの@ブロック (コンストラクトなど)

@foreach (var foo in bar) {
    <div>@(foo.A)</div>
    <div>@(foo.B)</div>
    @foreach (var qux in foo.C) {
        <div>@(qux.D)</div>
        <div>@(qux.E)</div>
    }
}

多かれ少なかれ元気に見えますよね?残念ながら、実際には構文的に無効です。内側の@-prefixは、外側のブロック (外側foreach)の中断されない範囲内で発生するため、許可されていません。foreach

ソリューション?@内の を省略しforeachます。フォーマットするとどうなりますか?

@foreach (var foo in bar) {
    <div>@(foo.A)</div>
    <div>@(foo.B)</div>
    foreach (var qux in foo.C) {
    <div>@(qux.D)</div>
    <div>@(qux.E)</div>
    }
}

素晴らしい、内側のインデントを失いました。プー。

わかりました、それらの<text>ブロックはどうですか、何かに役立つはずですよね? 確かに、外側のforeachブロックの内容をブロックでラップし<text>ます。ここで、Razor に関する限り@、内側にプレフィックスを付けることforeachは構文的に有効です。

@foreach (var foo in bar) {
    <text>
    <div>@(foo.A)</div>
    <div>@(foo.B)</div>
    @foreach (var qux in foo.C) {
        <div>@(qux.D)</div>
        <div>@(qux.E)</div>
    }
    </text>
}

わかりました。ただし、これは機能しますが、元の質問の問題を例示しています。現在、<text>ブロックの内容は indentation に従っていません。なぜ私たちはただ持つことができないのですか:

@foreach (var foo in bar) {
    <text>
        <div>@(foo.A)</div>
        <div>@(foo.B)</div>
        @foreach (var qux in foo.C) {
            <div>@(qux.D)</div>
            <div>@(qux.E)</div>
        }
    </text>
}

または、さらに良いことに、ブロックをねじ込み、他のスコープ内でプレフィックス付きの構成<text>を許可します。@

@foreach (var foo in bar) {
    <div>@(foo.A)</div>
    <div>@(foo.B)</div>
    @foreach (var qux in foo.C) {
        <div>@(qux.D)</div>
        <div>@(qux.E)</div>
    }
}

tl;dr

私を肛門と呼んでください、私を狂人と呼んでください。関係ない; 私が知る限り、フォーマット設定に関係なく、この製品は正しく動作していません。

VS 2010 Razor の書式設定を強制的に説明どおりに動作させる方法を知っている人はいますか? (または、これは私の OCD の単なる夢物語ですか? )

4

1 に答える 1

1

回避策は次のとおりです。

  1. cshtmlファイルを右クリック
  2. で開く...
  3. 選ぶXML (Text) Editor
  4. CTRL + E、D を押します
于 2013-01-16T17:13:23.970 に答える