【发布时间】:2014-07-02 05:43:26
【问题描述】:
我从昨天开始就被这个问题所困扰。我开始使用 ASP.Net WebAPI 学习 knockoutjs。在我将数据发布回 API 控制器之前,一切都运行良好。每次我将数据发送到控制器时,它都会为 Person 对象的每个字段显示空值。
我尝试了所有方法,例如将 $.ajax 与 contentType: 'application/json' 或 contentType: 'application/json, utf-8...' 一起使用,但对我没有任何作用。请给出一些解决方案,我将非常感谢你..
这里是WebAPI Post Method的代码:
// 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编码??
-
你试过只发
var data_to_send = ko.toJSON(self) -
这行得通。但是您能解释一下为什么它不适用于 'ko.toJSON({value: self})' 吗?也将此作为答案发布,以便我接受。
标签: c# javascript asp.net-mvc-4 knockout.js asp.net-web-api