C# asp.net mvc ajax发送两个参数

C# asp.net mvc ajax发送两个参数,c#,ajax,asp.net-mvc,asp.net-mvc-4,C#,Ajax,Asp.net Mvc,Asp.net Mvc 4,为什么TestData不接收任何内容 POST 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

为什么TestData不接收任何内容

POST 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>

您可以像这样使用参数
数据

data: { json: 'json', date: 'date' },
json=json&date=date
即使您指定内容类型为
json
,jQuery也会使用它来序列化数据,因此数据的发送方式不是发送json,而是如下所示:

data: { json: 'json', date: 'date' },
json=json&date=date
但您的服务器希望提供json,因此模型绑定失败

相反,您应该在进行AJAX调用之前手动将数据序列化为json:

data: JSON.stringify({ json: 'json', date: 'date' }),

其余的代码似乎没有问题。

或者,删除
contentType:'application/json;charset=utf-8',
选项,因此它使用默认的
应用程序/x-www-form-urlencoded;字符集=UTF-8