2014-01-06 17 views
0

好吧,我找不到任何与我确切的问题,所以希望有人可以填补我这一点。我正在使用ASP.NET MVC 4(定位于4.5.1 Fx)并使用KO 3.0和最新的jQuery。我有一个比它所表示的.NET模型更多的属性的KO模型(2个只在视图中需要计算的观察值,而不在后端)。该场景是用户进行一些更改并点击保存按钮。这会调用KO VM中的一个方法,该方法使用jQuery将其发送回服务器并保存更改。 的控制方法看起来像这样:

public void Post(Profile profile) 
    { 
     var modifiedDate = DateTime.UtcNow; 
     var existingProfile = db.Profiles.FirstOrDefault(x => x.Id == profile.Id); 

     ...  

     db.SaveChanges(); 

    } 

我的KO方法看起来像这样:

self.updateProfile = function (profile) { 
    $.post("/api/profile", profile, function() { 
     alert('saved'); 
    }); 
}; 

现在,这工作得很好,但如果我试图改变使用$ AJAX方法(这是什么我想要更好的粮食控制),它失败了。

$.ajax({ 
     url: "/api/profile", 
     type: "post", 
     dataType: "json", 
     data: { 
      profile: profile 
     }, 
     success: function() { 
      alert('saved'); 
     } 
    }); 

在控制器方法的目的简档未绑定到由$ AJAX方法所发送的数据。我不确定为什么,因为$ post只是$ ajax的高级抽象。任何帮助,将不胜感激。

+0

打开调试控制台,两个请求标头有什么不同? – Jasen

+0

现在使用Fiddler 4中的WebForms Inspector查看2个不同的请求,我发现$ post方法的值为Id:value,OwnerId:value等,其中$ ajax方法具有profile [Id]:value,个人资料[OwnerId]:值。很明显,这是问题。 $ post方法做了什么,我需要在$ ajax中复制? – Shaggy13spe

回答

0

data: {profile: profile},是两个片段不同的地方。您可能需要data: profile

他们在这里也有所不同:dataType: "json",但如果您的服务器返回json,那也没关系。

$.ajax({ 
    url: "/api/profile", 
    type: "post", 
    //dataType: "json", optional, you can keep it if you want. 
    data: profile, 
    success: function() { 
     alert('saved'); 
    } 
}); 
+0

谢谢!我已经习惯张贴多个参数,只是认为{}并命名参数是必需的。 – Shaggy13spe

+1

另外,就像一小段信息一样,你可以在'$ .post'中复制'dataType:“json”''多个参数:'$ .post(url,data,successHandler,“json”)' –

+0

,任何想法如何使用$ .ajax传递多个参数?我尝试了下面,但徒劳无功 - $ .ajax({//url =“/ api/profile”, type:“post”, // dataType:“json”,可选,你可以保留它,如果你想的话 数据:{ param1:profile1,param2:profile2} success:function(){ alert('saved'); } }); – user2243747