2014-01-06 36 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