Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net NET模型中的字节数组时间戳已成功转换为可观察,但提交值为null-KnockoutJS_.net_Knockout.js_Bytearray - Fatal编程技术网

.net NET模型中的字节数组时间戳已成功转换为可观察,但提交值为null-KnockoutJS

.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”:

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


还要记录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;}