从昨天开始,我就陷入了这个问题。我开始使用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