asp.net mvc ajax发送两个参数

时间:2016-03-05 17:22:15

标签: c# ajax asp.net-mvc asp.net-mvc-4

为什么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);
    }

}

1 个答案:

答案 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' }),

其余的代码似乎没问题。