簡體   English   中英

Razor語法錯誤使用Html.Raw將ASP.NET模型序列化為JSON

[英]Razor syntax error serializing ASP.NET Model to JSON with Html.Raw

這行在Visual Studio 2012中給我一個語法錯誤(字面上只是'語法錯誤'):

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

在這種情況下, Model是在我的cshtml頂部聲明的@model MyApp.ViewModels.MyViewModel的實例。

我的模型被正確地序列化到數據var中,並且應用程序正常工作。 在美容方面,將錯誤永久存在於我的錯誤列表中會很煩人。

我應該如何修改該行以使編譯器滿意?

編輯:

根據要求,更多背景。 這是整個$(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>

使用功能

實現一個返回輸入參數的簡單JavaScript set函數:

function set(value){
    return value;
}

使用此函數將Razor模型值分配給JavaScript變量:

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

作為選項,您可以使用自我調用功能:

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

嘗試將其包裝在function ,如下所示:

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

使用JSON.Net而不是JavaScriptSerializer或DataContractJsonSerializer來避免JSON日期的噩夢

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

更容易!! 這將解決這個小煩惱:

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

基本上intellisense想要@Html.Raw周圍的東西。 實際上沒有錯,但我們必須處理智能感知的缺點。 這里我們將結果聲明為新數組的第一個索引,然后返回第一個索引。

僅供參考:如果您希望模型反映DOM的更改,請嘗試使用JSModel類。

您不需要編寫任何新的javascript函數,只需將代碼括在括號中即可

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

在Visual Studio 2015中適合我,不確定VS2012

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM