0

当我尝试在客户端视图模型中传递服务器端视图模型时出现 js 错误“Uncaught SyntaxError: Unexpected token &”(对于 knockout.js)

视图模型

public class InvoiceViewModel
{
        public Factuur Factuur { get; set; }
        public List<Factuurlijn> Factuurlijnen { get; set; }
}

控制器

        //Create Viewmodel
        InvoiceViewModel ivm = new InvoiceViewModel();

        //Initialize vm objects
        int aantaldagentotvervaldatum = Convert.ToInt32(General.getParameter("defaultaantaldagentotvervaldatum"));

        Factuur i = new Factuur { factuur_nummer = 1, factuur_nummervoorvoegsel = DateTime.Now.Year.ToString(), factuur_datum = DateTime.Now, factuur_type = Ftype, factuur_vervaldatum = DateTime.Now.AddDays(aantaldagentotvervaldatum), factuur_kortingspercentage = Convert.ToDecimal(General.getParameter("defaultkortingspercentage")) };

        List<Factuurlijn> FLijnen = new List<Factuurlijn>{new Factuurlijn(){ factuurlijn_aantal = 0, factuurlijn_item="", factuurlijn_prijs=0 }};

        // add objects to viewmodel
        ivm.Factuur = i;
        ivm.Factuurlijnen = FLijnen;

        return View(ivm);

看法

    @{
        //prepare viewmodel to assign to pas into js
        string initialData = new System.Web.Script.Serialization.JavaScriptSerializer().Serialize(Model);

    }

...

<script type="text/javascript">
    var initialDataJS = @(initialData)
    alert('initialdata : ' + initialDataJS);
</script>

我的警报没有被触发,我得到的错误;

在 FF 中:尝试在清除范围 Bronbestand 上运行 compile-and-go 脚本:chrome://firebug/content/net/requestObserver.js

在 Chrome 中: Uncaught SyntaxError: Unexpected token &

在我尝试将它分配给 js 变量之前,我感觉它在 viewmodel 的序列化上出错了,但我不明白为什么......

我已经试过了

string initialData = Json.Encode(Model);

但没有成功......然后我在我的js错误中看到了这个

错误:无效的属性 ID

var initialDataJS = {&quot;Factuur&quot;:{&quot;factuur_id&quot;:0,&quot;factuur_nummervoorvoegsel&quot;:&quot;2012&quot;,&quot;factuur_nummer&quot;:1,&quot;factuur_type&quot;:&quot;F&quot;,&quot;bedrijf_id&quot;:0,&quot;factuur_naam&quot;:null,&quot;factuur_notities&quot;:null,&quot;factuur_details&quot;:null,&quot;factuur_datum&quot;:&quot;\/Date(1335443889648)\/&quot;,&quot;factuur_vervaldatum&quot;:&quot;\/Date(1336307889648)\/&quot;,&quot;factuur_kortingspercentage&quot;:0,&quot;factuur_betaald&quot;:false,&quot;factuur_bedrijf_naam&quot;:null,&quot;factuur_bedrijf_adres&quot;:null,&quot;factuur_bedrijf_postcode&quot;:null,&quot;factuur_bedrijf_gemeente&quot;:null,&quot;factuur_bedrijf_land&quot;:null,&quot;factuur_bedrijf_tel&quot;:null,&quot;factuur_bedrijf_fax&quot;:null,&quot;factuur_bedrijf_gsm&quot;:null,&quot;factuur_bedrijf_email&quot;:null,&quot;factuur_bedrijf_website&quot;:null,&quot;factuur_bedrijf_btw&quot;:null,&quot;factuur_deleted&quot;:false,&quot;bedrijf&quot;:null,&quot;bedrijfReference&quot;:{&quot;Value&quot;:null,&quot;EntityKey&quot;:null,&quot;RelationshipName&quot;:&quot;ScotaModel.facturen_ibfk_1&quot;,&quot;SourceRoleName&quot;:&quot;facturen&quot;,&quot;TargetRoleName&quot;:&quot;Bedrijf&quot;,&quot;RelationshipSet&quot;:null,&quot;IsLoaded&quot;:false},&quot;factuurlijnen&quot;:[],&quot;EntityState&quot;:1,&quot;EntityKey&quot;:null},&quot;Factuurlijnen&quot;:[{&quot;factuurlijn_id&quot;:0,&quot;factuur_id&quot;:0,&quot;factuurlijn_item&quot;:&quot;&quot;,&quot;factuurlijn_aantal&quot;:0,&quot;factuurlijn_prijs&quot;:0,&quot;factuurlijn_btwbedrag&quot;:0,&quot;factuurlijn_btwpercentage&quot;:0,&quot;factuurlijn_datum&quot;:&quot;\/Date(-62135596800000)\/&quot;,&quot;factuurlijn_volgorde&quot;:null,&quot;factuurlijn_deleted&quot;:false,&quot;facturen&quot;:null,&quot;facturenReference&quot;:{&quot;Value&quot;:null,&quot;EntityKey&quot;:null,&quot;RelationshipName&quot;:&quot;ScotaModel.factuurlijnen_ibfk_1&quot;,&quot;SourceRoleName&quot;:&quot;factuurlijnen&quot;,&quot;TargetRoleName&quot;:&quot;facturen&quot;,&quot;RelationshipSet&quot;:null,&quot;IsLoaded&quot;:false},&quot;EntityState&quot;:1,&quot;EntityKey&quot;:null}]}

有人可以帮帮我吗?

4

2 回答 2

1

改变

var initialDataJS = @(initialData)

var initialDataJS = @Html.Raw(initialData)

来自 Phil Haack http://haacked.com/archive/2011/01/06/razor-syntax-quick-reference.aspx

Razor 正在尝试对所有这些引号进行安全编码,但您实际上需要它们用于 Javascript。

于 2012-04-26T14:27:00.340 回答
0

您需要替换引号字符。这就是我所做的

    var jsonStr = '@(Model.JSONData)';
    var json = JSON.parse(jsonStr.replace(/&quot;/g, '"'));

    viewModel = new JsModel(json);
    ko.applyBindings(viewModel);

所以在这个例子中,你将来自服务器的数据保存为 jsonStr 变量中的字符串,然后在 regEx 的帮助下替换双引号并解析它。这将创建一个 json 对象。

于 2012-06-12T15:07:10.777 回答