为什么TestData没有收到任何内容?
POST http://localhost:46628/Home/TestData 500(内部服务器错误)
index.cshtml:
@{
ViewBag.Title = "Index";
}
<h2>Index</h2>
<script src="~/Scripts/knockout-2.2.0.js"></script>
<button data-bind="click: sendata">send data</button>
<script>
function MyViewModel() {
var self = this;
self.sendata = function () {
$.ajax({
type: 'POST',
url: 'Home/TestData',
contentType: 'application/json; charset=utf-8',
data: { json: 'json', date: 'date' },
dataType: 'json'
});
}
}
ko.applyBindings(new MyViewModel());
</script>
控制器:
public class HomeController : Controller
{
//
// GET: /Home/
public ActionResult Index()
{
return View();
}
[HttpPost]
public void TestData(string json,string date)
{
Console.WriteLine(json);
}
}
答案 0 :(得分:4)
您可以像这样使用参数data
:
data: { json: 'json', date: 'date' },
即使您指定了内容类型为json
,jQuery也会使用$.param
来序列化您的数据,因此不会发送json,而是发送数据:
json=json&date=date
您的服务器虽然希望提供json,但模型绑定失败。
相反,您应该在进行AJAX调用之前手动将数据序列化为json:
data: JSON.stringify({ json: 'json', date: 'date' }),
其余的代码似乎没问题。