60

Visual Studio 2012を使用して、RazorビューページのJavaScriptセクションで、Razor構文とJavaScript構文の戦いだと思うものを取得しています。特に、スクリプトセクションの末尾のセミコロンはインテリセンスによってフラグが付けられ、コンパイラの警告(エラーではない)が配信されます。

「警告13構文エラー」。

それを削除すると、ステートメント終了の推奨事項が表示されます(この場合はReSharperですが、良い習慣です)。

<script type="text/javascript">
    $().ready(function(){
        var customer = @Html.Raw(ViewBag.CustomerJSON);  // <- Razor (I think) doesn't like this semicolon
    });
</script>

これはRazorのバグですか?もしそうなら、この問題を回避するためにこれを書き直すことができる方法はありますか?

4

7 に答える 7

67

これはRazorのバグですか?

絶対違う。アプリケーションを実行すると、期待どおりに機能します。

これは、使用しているツール(Visual Studio 2012、ReSharperなど)のバグであり、完全に有効な構文を認識できず、警告すべきでないことについて警告することができません。Microsoft Connectサイトで問題を開いて、まだ行われていない場合は、このバグを通知してみてください。

于 2012-08-25T06:53:01.180 に答える
23

これはまだ起こっているようで、それは私が「ハック」として使用することになったものを少なくとも他の人に知らせると私が考えた迷惑であるため。私は警告を無視したくなく、むしろよりホキアな構文を受け入れたいと思います(そして、そうです、誰かがこれはパフォーマンスを殺すと言うでしょう:))

回避策として使用するのは、最後にクライアント側の追加を使用することです。私の場合、このエラーは「整数」定数の定義時に発生したため、

window.foo = @(Model.Something);

古き良きセミコロンエラーが発生しました。これを次のように変更しただけです。

window.foo = @Model.Something + 0;

(記載されている質問の場合は、''を追加できるはずなので、+''。

クライアントでまったく別の追加が行われていることはわかっていますが、それはエレガントではありませんが、エラーを回避できます。だからそれを使うか使わないか、しかし私は警告/エラーを見るよりもこれを好む。

誰かがこれに対するサーバー側の構文上の回避策を知っているなら、私はこれをクライアント側のものよりも好むので、追加してください。

于 2013-04-01T17:56:52.770 に答える
7

Razor構文をJavaScript恒等関数でラップすると、IDEも満足できることがわかりました。

<script type="text/javascript">
    @* I stands for Identity *@
    function I(obj) { return obj; }
    $().ready(function(){
        var customer = I(@Html.Raw(ViewBag.CustomerJSON));
    });
</script>
于 2014-11-15T01:23:04.567 に答える
3

これは私のために働いた:

var customer = @Html.Raw(ViewBag.CustomerJSON + ";")
于 2014-04-02T14:45:55.607 に答える
1

ブール値の回避策は次のとおりです。

var myBool = @(Model.MyBool ? "true;" : "false;")
于 2014-08-07T16:44:04.403 に答える
1

これは私のために働いた

@Html.Raw(string.Format("var customer = {0};", ViewBag.CustomerJSON));
于 2014-08-08T00:28:10.170 に答える
1
<script type="text/javascript">
    $().ready(function(){
        var customerName = ('@ViewBag.CustomerName');  // <- wrap in parens
    });
</script>

かっこで囲むのと同じくらい簡単ではないですか?コンソールに値を入力しても、副作用はなく正常に機能しているようです。

文字列に対しては機能しますが、引用符で囲まれていない値に対してはエラーが発生しますが、文字列値に対してはこれが好きです。数字の場合は、を使用できますparseInt('@Model.TotalResultCount', 10)

于 2015-05-08T12:36:15.203 に答える