web-dev-qa-db-ja.com

Html.RawでASP.NETモデルをJSONにシリアル化するRazor構文エラー

この行は、Visual Studio 2012の構文エラーを示しています(文字通り「構文エラー」):

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

この場合のModelは、cshtmlの先頭で宣言された_@model MyApp.ViewModels.MyViewModel_のインスタンスです。

私のモデルはデータ変数に適切にシリアル化され、アプリケーションは正しく動作します。表面的には、エラーリストに永続的にエラーがあるとうっとうしいだけです。

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

編集:

要求に応じて、より多くのコンテキスト。 $(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>
_
24
Tom Studee

機能を使用する

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

function set(value){
    return value;
}

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

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

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

var data = function() { return set(@Json.Encode(Model)); }();
27
Andrei

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

var data = function() { return @Html.Raw(Json.Encode(Model)); }();
16
haim770

JavaScript-SerializerまたはDataContractJsonSerializerの代わりに JSON.Net を使用して、 JSON Datesである悪夢 を回避します。

var data = function () { 
    return @Html.Raw(Newtonsoft.Json.JsonConvert.SerializeObject(Model)); }();
13
Rich Bennema

さらに簡単!!これにより、その小さな煩わしさが解消されます。

var model = [@Html.Raw(Json.Encode(Model))][0];

基本的にインテリセンスは@Html.Raw。実際には何も問題はありませんが、インテリセンスの欠点を処理する必要があります。ここでは、結果を新しい配列の最初のインデックスとして宣言し、最初のインデックスを返します。

参考:モデルにDOMへの変更を反映させたい場合は、 JSModel クラスを試してください。

8
Chad Kuehn

新しいjavascript関数を記述する必要はありません。コードを角かっこで囲むだけです

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

visual Studio 2015で私のために働く、VS2012についてはわからない

3
sad_robot