我有一个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 = {"Factuur":{"factuur_id":0,"factuur_nummervoorvoegsel":"2012","factuur_nummer":1,"factuur_type":"F","bedrijf_id":0,"factuur_naam":null,"factuur_notities":null,"factuur_details":null,"factuur_datum":"\/Date(1335443889648)\/","factuur_vervaldatum":"\/Date(1336307889648)\/","factuur_kortingspercentage":0,"factuur_betaald":false,"factuur_bedrijf_naam":null,"factuur_bedrijf_adres":null,"factuur_bedrijf_postcode":null,"factuur_bedrijf_gemeente":null,"factuur_bedrijf_land":null,"factuur_bedrijf_tel":null,"factuur_bedrijf_fax":null,"factuur_bedrijf_gsm":null,"factuur_bedrijf_email":null,"factuur_bedrijf_website":null,"factuur_bedrijf_btw":null,"factuur_deleted":false,"bedrijf":null,"bedrijfReference":{"Value":null,"EntityKey":null,"RelationshipName":"ScotaModel.facturen_ibfk_1","SourceRoleName":"facturen","TargetRoleName":"Bedrijf","RelationshipSet":null,"IsLoaded":false},"factuurlijnen":[],"EntityState":1,"EntityKey":null},"Factuurlijnen":[{"factuurlijn_id":0,"factuur_id":0,"factuurlijn_item":"","factuurlijn_aantal":0,"factuurlijn_prijs":0,"factuurlijn_btwbedrag":0,"factuurlijn_btwpercentage":0,"factuurlijn_datum":"\/Date(-62135596800000)\/","factuurlijn_volgorde":null,"factuurlijn_deleted":false,"facturen":null,"facturenReference":{"Value":null,"EntityKey":null,"RelationshipName":"ScotaModel.factuurlijnen_ibfk_1","SourceRoleName":"factuurlijnen","TargetRoleName":"facturen","RelationshipSet":null,"IsLoaded":false},"EntityState":1,"EntityKey":null}]}
有人可以帮帮我吗?
答案 0 :(得分:1)
更改
var initialDataJS = @(initialData)
到
var initialDataJS = @Html.Raw(initialData)
Razor正试图安全地编码所有这些引号,但实际上你需要它们用于Javascript。
答案 1 :(得分:0)
您需要替换引号字符。这就是我做的事情
var jsonStr = '@(Model.JSONData)';
var json = JSON.parse(jsonStr.replace(/"/g, '"'));
viewModel = new JsModel(json);
ko.applyBindings(viewModel);
所以在这个例子中,您将服务器中的数据保存为jsonStr变量中的字符串,然后在regEx的帮助下替换双引号并解析它。这将创建一个json对象。