25

この行により、Visual Studio 2012 で構文エラーが発生します (文字通り「構文エラー」)。

var data = @Html.Raw(new System.Web.Script.Serialization.JavaScriptSerializer().Serialize(Model));

Modelこの場合@model MyApp.ViewModels.MyViewModel、cshtml の先頭で宣言されているインスタンスです。

モデルはデータ変数に正しくシリアル化され、アプリケーションは正しく動作します。エラーリストにエラーが永久に残るのは、見かけ上、ただうっとうしいだけです。

コンパイラが満足するように行を変更するにはどうすればよいですか?

編集:

リクエストに応じて、より多くのコンテキスト。全体は次の$(document).ready()とおりです。

<script type="text/javascript">

    $(document).ready(function () {

        $('#ReportDate').datepicker();
        $('#DispositionDate').datepicker();

        var data = @Html.Raw(new System.Web.Script.Serialization.JavaScriptSerializer().Serialize(Model));

        var vm = new NonconformingProductViewModel(data);
        ko.applyBindingsWithValidation(vm);

        // validate on page load so all reqd fields are highlighted.
        var valid = ko.validation.group(vm, {deep: true});
        valid.showAllMessages(true);

    }); // end document.ready

</script>
4

5 に答える 5

28

機能の使用

入力引数を返す単純な JavaScriptset関数を実装します。

function set(value){
    return value;
}

この関数を使用して、Razor モデル値を JavaScript 変数に割り当てます。

var data = set(@Json.Encode(Model));

オプションとして、自己呼び出し関数を使用できます。

var data = function() { return set(@Json.Encode(Model)); }();
于 2013-07-12T14:32:32.857 に答える
17

function次のように a でラップしてみてください。

var data = function() { return @Html.Raw(Json.Encode(Model)); }();
于 2013-07-14T20:44:22.743 に答える
13

JavaScriptSerializer または DataContractJsonSerializer の代わりにJSON.Netを使用して、JSON Dates という悪夢を回避します。

var data = function () { 
    return @Html.Raw(Newtonsoft.Json.JsonConvert.SerializeObject(Model)); }();
于 2014-07-26T16:57:47.910 に答える
4

新しい JavaScript 関数を記述する必要はありません。コードを括弧で囲むだけです。

var data = (@Html.Raw(Json.Encode(Model)));

VS2012についてはわかりませんが、Visual Studio 2015で動作します

于 2016-03-06T16:40:13.660 に答える