4

ac# MVC 3 カミソリ ページに次のコードがあり、シリアル化されたデータを KnockoutJs の JavaScript 変数に渡しています。

    @{   
        var listData = new JavaScriptSerializer().Serialize(Model.ListItems);
        var pagerData = new JavaScriptSerializer().Serialize(Model.Pager);
    }


// additional code

    <script type="text/javascript" >

        var ListData = @(Html.Raw(listData));  // <-- Syntax Error here
        var PagerData = @(Html.Raw(pagerData));  // <-- Syntax Error here

     // additional js code

    </script>   

VS 2012 にアップグレードした後、上記の Html.Raw 行の最後の javascript セミコロンの後にエラーの波線が表示されます。プロジェクトは準拠していますが、VS 2012 は各行のエラー リストに「構文エラー」を表示します。セミコロンがない場合、javascript は「構文エラー」も表示します。

このコードは、以前のバージョンでは問題なく動作しました。これは VS 2012 パーサーのバグですか? また、生成されたエラーを回避する方法はありますか?

編集 この問題を見た人はいますか? 以下は、同じ問題を新しいページに分離した簡略版です。ListData 行の末尾にセミコロンを追加すると、javascript 構文エラーが発生します。セミコロンがないと、次の行になります。これは、VS2010 と VS2012 の間の JavaScript コンパイラのバグですか?

@{   
    var listData = "test";
    var pagerData = "test2";
}
    <script type="text/javascript" >
        var ListData =  @(Html.Raw(listData))
        var PagerData =  @(Html.Raw(pagerData))
    </script>
4

4 に答える 4

4

この接続の問題に投票を追加してください。この問題は、VSの次のバージョンで対処します。このバグにあなたの再現コードを添付し、問題の別の兆候としてこの投稿へのリンクを追加しました。

于 2012-10-12T21:40:52.620 に答える
1

私はMVC5を使用していて同じ問題を見つけているので、この方法で解決しました。これはすべてのバージョンで機能するはずです

@Html.Raw("var myData = " +  Json.Encode(this.Model.MyData) + ";" )

ただし、VAR 型に関するインテリセンスを失うため、これは最も単純な状況でのみ使用します (ただし、VAR 型はグローバル インスタンスとして扱われ、コンパイラはウォブラーをスローしません)。定義は、おそらく続行するための最良の方法です。

于 2013-11-28T11:33:54.397 に答える
1

この問題は、Visual Studio 2013 SP 2 にも存在します。

この警告メッセージを修正するには、最初に JavaScript 変数を初期化します。IMO Visual Studio では、var の後に @ が続く場合、var は暗黙的に型指定されていると見なされます。

        var ListData;
        var PagerData;
        ListData =  @(Html.Raw(listData));
        PagerData =  @(Html.Raw(pagerData));
于 2013-06-19T17:25:40.163 に答える
0

私は同じことが起こったことがありますが、それはランダムに起こります。私がそれを解決しようとしたのは次のとおりです。

デバッグ モードでコンパイル/ビルド/デバッグできることを確認し、リリース モードに切り替えて、そのモードからデバッグ/公開を試みます。デバッグ モードに戻り、発行を再試行します。

切り替えモードのいくつかの組み合わせがうまくいきますが、それが正確に何であるかを突き止めることはできません. 動作するようになったら、VS を閉じないでください ;-)

MS が SP1 でこれを修正することを期待しましょう。

于 2012-11-14T21:01:57.763 に答える