.net NET模型中的字节数组时间戳已成功转换为可观察,但提交值为null-KnockoutJS
.NET+KnockoutJS,使用knockout-mapping.js进行映射 就像在纯.NET中一样application@Html.TextBoxFor(model=>model.questionarie.Sheets.ToList()[0].Timestamp)显示时间戳。使用knockout没有任何意义 查看源代码时,序列化对象数据如下所示 var数据={“问题集”:{“表格”:[{“组”:[{“组问题”:[{“组:空”,问题:[{“答案”:[{“问题”:空,回答:1,“问题ID”:1,“用户ID”:1,“值”:1,“用户”:空,“时间戳”:[0,0,0,0,0,0,7221].net NET模型中的字节数组时间戳已成功转换为可观察,但提交值为null-KnockoutJS,.net,knockout.js,bytearray,.net,Knockout.js,Bytearray,.NET+KnockoutJS,使用knockout-mapping.js进行映射 就像在纯.NET中一样application@Html.TextBoxFor(model=>model.questionarie.Sheets.ToList()[0].Timestamp)显示时间戳。使用knockout没有任何意义 查看源代码时,序列化对象数据如下所示 var数据={“问题集”:{“表格”:[{“组”:[{“组问题”:[{“组:空”,问题:[{“答案”:[{“问题”:空,回答:1,“问题ID”:
还要记录viewmodel,timestamp也变成了observable,但是subcommitted值为null,请帮助!我唯一能想到的方法是在model类中添加一个属性作为字节数组的字符串表示,让knockout提交该字符串值而不是bytearray,但不要认为这是个好主意。s麻烦了,Roberts和Patrick,下次我将发布一个提琴,但关于这个问题,提琴也不会有任何帮助。提交回后端的json数据(ko.toJSON(self.mysurvey))包含bytearray的字符串表示,如“时间戳”:[0,0,0,0,0,1,17133],问题是.NET将其转换为null。此处可以找到一个相关问题:。因此,敲除功能正常,但可能还有另一种方法将时间戳更改为“[0,0,0,0,0,1,17133]”格式,可以识别为.NET控制器字节[]的默认MVC3 ModelBindertype希望数据以Base64字符串的形式传输,但JavascriptSerializer将其作为数组推出。如果不更改客户端或服务器端基础结构,则无法解决往返问题 客户端 在发送到服务器之前,您需要将JSON中的时间戳编码为base64字符串。在ko.toJSON中添加替换函数,以便在具有时间戳属性时进行转换
var convertTimestampToBase64String = function(data)
{
var str = String.fromCharCode.apply(null,data);
return btoa(str);
}
var timestampReplacer = function(key, value) {
if ( key === 'Timestamp' && Array.isArray(value)) {
return convertTimestampToBase64String(value);
}
return value;
}
self.submitSurvey = function () {
$.ajax({
url: "/Survey/SubmitSurvey/",
type: 'post',
data: ko.toJSON(self.mysurvey, timestampReplacer),
contentType: 'application/json',
success: function (result) {
alert("survy is saved")
}
});
}
服务器端
另一种选择是用另一个供应商(如JSON.NET)替换JSON序列化程序和值提供程序。有关可能的实现详细信息,请参阅我的答案。演示网站上的错误,重新创建实体框架Hi Robert,它正在工作,请帮助,单击保存将引发此异常”存储更新、插入或删除语句影响了意外的行数(0)。。。。"因为Timestamp为null,所以无法查看您将Timestamp属性绑定到何处。另外,请不要使用包含大量代码的大型站点作为您的问题示例。请创建一个显示您的问题的站点。请创建一个显示您的问题的最小JSFIDLE/PLUNK/jsbin,这样您将更有可能让更多人尝试回答您的问题on.Hi,抱歉,我不知道如何用javascript创建字节数组,不能一蹴而就。如果您再次访问演示页面,您会看到日志对象已经包含可观察的bytearray for timestamp,但提交值为null。此外,我添加了两个区域,一个区域背景颜色为蓝色,使用.net代码显示时间戳,另一个区域为h绿色显示Knockout的值我猜元素的默认值绑定没有处理数组。如何在文本框中显示数组?是否使用字符串()它?您是否将其视为字符数组?为什么要在文本框中显示数组?Knockout可以处理将数组存储在可观察对象中,然后稍后使用ko.toJSON将其提取出来。如果您的值为null,则会发生其他情况。请创建一个小JSFIDLE来重现您的问题。JSON库是什么您使用在服务器上序列化和反序列化JSON?服务器端模型中的Timestamp属性是什么数据类型?我使用的是.NET MVC控制器使用的默认JSON提供程序,时间戳的类型如下[Timestamp]public Byte[]Timestamp{get;set;}