MVC ViewModel> JS ViewModel - 未捕获的SyntaxError:意外的令牌&

时间:2012-04-26 12:42:43

标签: asp.net-mvc-3 knockout.js

我有一个js错误“Uncaught SyntaxError:Unexpected token&”当我尝试在clientide viewmodel中传递我的服务器端viewmodel时(对于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:chrome://firebug/content/net/requestObserver.js

Chrome中的

未捕获的SyntaxError:意外的令牌&amp;

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

我已经尝试了

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}]}

有人可以帮帮我吗?

2 个答案:

答案 0 :(得分: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。

答案 1 :(得分:0)

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

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

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

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