從昨天開始,我就陷入了這個問題。我開始使用ASP.Net WebAPI學習knockoutjs。一切工作都很好,直到我將數據發回到API控制器。每次我將數據分配給控制器時,它都會顯示Person對象的每個字段的空值。ASP.Net WebAPI Post方法顯示空值
我什麼都試過例如使用$ .ajax和contentType:'application/json',或contentType:'application/json,utf-8 ...',但對我來說沒有任何作用。請給一些解決方案,我會非常感謝你..
這裏是的WebAPI POST方法的代碼:
// POST api/some
public HttpResponseMessage Post([FromBody]Person value)
{
repository.SavePerson(value);
return Request.CreateResponse(HttpStatusCode.OK);
}
這裏是Person類
public class Person
{
public string firstName { get; set; }
public string lastName { get; set; }
public List<string> activities { get; set; }
public string favoriteHobby { get; set; }
}
而這裏的JavaScript /淘汰賽代碼
function PersonViewModel() {
var self = this;
self.firstName = ko.observable('');
self.lastName = ko.observable('');
self.activities = ko.observableArray([]);
self.favoriteHobby = ko.observable('');
self.loadUserData = function() {
$.getJSON("api/Some/Get", function (data) {
self.firstName(data.firstName);
self.lastName(data.lastName);
self.activities(data.activities);
self.favoriteHobby(data.favoriteHobby);
});
}
self.saveUserData = function() {
var data_to_send = { value: ko.toJSON(self) };
$.post("api/Some/Post", data_to_send, function (data) {
});
}
};
ko.applyBindings(new PersonViewModel());
最後這裏是HTML
<form action="#" method="post">
<p>
First name:
<input data-bind='value: firstName' />
</p>
<p>
Last name:
<input data-bind='value: lastName' />
</p>
<div>
Your favorite food:
<select data-bind='options: activities, value: favoriteHobby'>
</select>
</div>
<p>
<button data-bind='click: loadUserData'>Load Data</button>
<button data-bind='click: saveUserData'>Save Data</button>
</p>
</form>
你需要設置內容類型爲url編碼嗎? – qamar
您是否嘗試過發佈'var data_to_send = ko.toJSON(self)' –
This Worked。但是你能解釋爲什麼它不適用'ko.toJSON({value:self})'嗎?還張貼這個答案,所以我可以接受它。 – Hammad