【发布时间】:2014-01-24 09:43:33
【问题描述】:
好的,我找不到任何与我的确切问题有关的东西,所以希望有人能帮我补充一下。我正在使用 ASP.NET MVC 4(针对 4.5.1 Fx)并使用 KO 3.0 和最新的 jQuery。我有一个 KO 模型,它比它所代表的 .NET 模型具有更多的属性(2 个计算的 observables 只需要在视图中而不是在后端)。场景是用户进行了一些更改并点击了保存按钮。这会调用 KO VM 中的一个方法,该方法使用 jQuery 回发到服务器并保存更改。 Controller 方法如下所示:
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');
}
});
Controller 方法中的对象配置文件未绑定到 $ajax 方法发送的数据。我不知道为什么,因为 $post 只是 $ajax 的高级抽象。任何帮助将不胜感激。
【问题讨论】:
-
打开调试控制台,这两个请求头有何不同?
-
查看现在在 Fiddler 4 中使用 WebForms Inspector 的 2 个不同请求,我看到 $post 方法具有值 Id:value、OwnerId:value 等,而 $ajax 方法具有profile[Id]:值,profile[OwnerId]:值。很明显,这就是问题所在。我需要在 $ajax 中复制的 $post 方法有什么作用?
标签: asp.net-mvc jquery knockout.js asp.net-web-api