2016-03-05 74 views
2

为什么TestData没有收到任何东西?asp.net mvc ajax发送两个参数

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); 
    } 

} 

回答

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

的代码的其余部分似乎是罚款。

+1

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