Javascript Asp.NETMVC使用敲除渲染部分视图

Javascript Asp.NETMVC使用敲除渲染部分视图,javascript,jquery,asp.net-mvc,asp.net-mvc-4,knockout.js,Javascript,Jquery,Asp.net Mvc,Asp.net Mvc 4,Knockout.js,我在项目中使用Web Api和Knockout.js。我想这样尝试:如果我点击“Home”,我只想刷新main div。所以我写了这段代码 layout.cshtml中的我的脚本 $(文档).ready(函数(){ applyBindings(new TalesViewModel());//首先加载正在运行的代码并加载主div 函数TalesViewModel(){ var self=这个; self.tales=ko.observearray(); $.getJSON(“/api/tales

我在项目中使用Web Api和Knockout.js。我想这样尝试:如果我点击“Home”,我只想刷新main div。所以我写了这段代码

layout.cshtml中的我的脚本

$(文档).ready(函数(){
applyBindings(new TalesViewModel());//首先加载正在运行的代码并加载主div
函数TalesViewModel(){
var self=这个;
self.tales=ko.observearray();
$.getJSON(“/api/tales/”,self.tales);
}
$('#home')。单击(函数(){
var Tale=功能(TaleName、内容、语音路径、Tales){
self=这个;
self.TaleName=TaleName;
内容=内容;
self.VoicePath=语音路径;
}
变量映射={
“故事”:{
创建:函数(选项){
返回新故事(options.data.TaleName、options.data.Content、,
选项。数据。语音路径);
}
}
}
var data=$.getJSON(“/api/tales/”,Tale);
var viewModel=ko.mapping.fromjs(数据,映射);
应用绑定(视图模型);
})
})
我想刷新这个地方

@RenderBody()
TaleList.cshtml(PartialView)

  • 马萨尔阿德 İçerik 塞斯多斯亚斯酒店

当我点击主页时,主div是刷新的,但是这里没有数据。我想我必须用击倒的东西,但我不知道怎么做

我希望我能解释。谢谢大家的回复

更新 如果我检查firebug,我会看到这个错误“TypeError:Object”没有“fromjs”方法

更新2
我在加载项目时添加了第一个淘汰代码。

这就是您需要做的:

创建一个js对象

var Tale = function (TaleName, Content, VoicePath, Tales) {
    self = this;
    self.TaleName = TaleName;
    self.Content = Content;
    self.VoicePath = VoicePath;
}
创建映射以转换为js对象

var mapping = {
    'tales': {
        create: function(options) {
            return new Tale(options.data.TaleName, options.data.Content,     
              options.data.VoicePath);
        }
    }
}
检查您的数据是否与以下内容匹配,检查名称是否匹配,如下所示:

var data = {"tales" : [{"TaleName": "T1", "Content":"c1", "VoicePath":"v1"}, {"TaleName": "T2", "Content":"c2", "VoicePath":"v2"}]}
var viewModel = ko.mapping.fromJS(data, mapping);
应用绑定

ko.applyBindings(viewModel);
这里是一个工作小提琴与模拟数据

更新

您混合了
getJson
ajax
的组合,您只需要一个

这可以替换为:(使用Ajax)

使用getJSON:

 var data = $.getJSON("/api/tales/", Tale);
 var viewModel = ko.mapping.fromJS(data, mapping);
 ko.applyBindings(viewModel);  
更新3

如果您在加载初始加载时将其更改为,则只需将其放入单击事件中即可:

   $('#home').click(function () {
        ko.applyBindings(new TalesViewModel());
    })
更新4

在文档中声明视图模型已就绪

  $(document).ready(function () {
    var viewModel = new TalesViewModel();
    ko.applyBindings(viewModel);
然后将您的单击更改为:

  $(document).ready(function () {
     viewModel = new TalesViewModel();

与其重新加载整个HTML,您只需请求作为JSON的数据,然后更新您的
tales
observatarray,这将反映在您的视图中。我得到了它,我在代码中做了一些更改。请检查我的问题是否正在初始加载中将数据加载到页面上?是初始加载没有问题我看到了我的数据,但我在检查控制台时单击“主页”,我看到此错误“您无法对同一元素多次应用绑定”。我尝试你的第三次更新,并再次“你不能应用绑定…”我尝试它,没有错误。但在我更新数据库后,我单击“主页”“无数据更改”
 var data = $.getJSON("/api/tales/", Tale);
 var viewModel = ko.mapping.fromJS(data, mapping);
 ko.applyBindings(viewModel);  
   $('#home').click(function () {
        ko.applyBindings(new TalesViewModel());
    })
  $(document).ready(function () {
    var viewModel = new TalesViewModel();
    ko.applyBindings(viewModel);
  $(document).ready(function () {
     viewModel = new TalesViewModel();