2016-03-05 59 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' –