使用ASP.NET MVC解决JSON数据重装问题

时间:2013-03-19 13:25:16

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

我使用ko.mapping.fromJS(Model)将一个ASP.NET MVC viewModel加载到KnockoutJS中。

我的viewModel看起来像这样:

public IEnumerable<FunkyThing>funkyThings;
public FunkyThing selectedFunkyThing;

每个FunkyThing都有一个字符串属性funkyThingName。 映射工作正常,我可以看到表中所有带有名字的时髦东西。

我想添加一个快速刷新按钮。所以我创建了一个简单的按钮然后数据绑定按钮点击一个淘汰功能刷新,看起来像这样:

   model.refresh= function () {
            var url = '@Url.Action(MVC.FunkyThings.RefreshJSON())';
            $.getJSON(url, function (returnedData) {                
                ko.mapping.fromJS(returnedData, {}, model.funkyThings);
            });

成功调用refresh函数,然后调用服务器上的RefreshJSON方法。服务器传回JSON数据 - 一个更新的funkyThings数组,当我将鼠标悬停在chrome的调试器中的returnedData上时,我可以在chrome中看到它。

然而不幸的是,在映射函数被称为绑定中断后:

未捕获错误:无法解析绑定。 消息:ReferenceError:未定义funkyThingName; 绑定值:text:funkyThingName

我不确定为什么......?

2 个答案:

答案 0 :(得分:1)

model.funkyThings是否可观察?如果是,则可以尝试将其作为函数传递给映射方法:

ko.mapping.fromJS(returnedData, {}, model.funkyThings());

如果失败了,你确定刷新方法返回的JSON结构是否正确?

啊,如果你回来了JSON字符串,那么你需要调用映射插件的fromJSON方法:

ko.mapping.fromJSON(returnedData, {}, model.funkyThings);

你也可以在这里找到funkyThings的括号,但不用先试试。

答案 1 :(得分:1)

如果返回的对象格式正确,并且绑定工作也很顺利 只需要这样做:

    model.FunkyThings(returnedData).