ASP.NET MVCでWebアプリケーションを作成し、JavaScript AJAXを介してコントローラーを呼び出そうとしました。 JQueryでは、MVCモデルバインダーが自動的に.NETオブジェクトを作成し、コントローラーを引数として渡すjsonオブジェクトを送信できます。
ただし、jqueryを使用できないWebワーカーを使用しています。 AJAXを呼び出してVanilla xmlhttprequestオブジェクトを呼び出します。このメソッドを介してJsonオブジェクトを送信する方法はありますか?
私はxmlhttprequestのsendメソッドを使用しましたが、モデルオブジェクトはコントローラーでnullとして渡されます:(
JSON2を使用して文字列化し、Content-Type
ヘッダーからapplication/json
投稿したとき。
http://ajax.cdnjs.com/ajax/libs/json2/20110223/json2.js
あなたは次のようなことをするでしょう:
var xhr = new XMLHttpRequest();
xhr.open('POST', '/Controller/Action');
xhr.setRequestHeader('Content-Type', 'application/json');
xhr.onreadystatechange = function () {
if (xhr.readyState == 4 && xhr.status == 200) {
alert(xhr.responseText);
}
}
xhr.send(JSON.stringify(myData));
ここに例があります。 JsonValueProviderFactory
が組み込まれたASP.NET MVC 3.0を使用していることを前提としています。これが当てはまらない場合は、 このブログ投稿 を参照してください。
モデルを見る:
public class MyViewModel
{
public string Prop1 { get; set; }
public string Prop2 { get; set; }
}
コントローラ:
public class HomeController : Controller
{
public ActionResult Index()
{
return View();
}
public ActionResult SomeAction(MyViewModel model)
{
return Content("success", "text/plain");
}
}
見る:
<script type="text/javascript">
var http = new XMLHttpRequest();
var value = '{ "prop1": "value 1", "prop2": "value 2" }';
// It would be better to use JSON.stringify to properly generate
// a JSON string
/**
var value = JSON.stringify({
prop1: 'value 1',
prop2: 'value 2'
});
**/
http.open('POST', '/Home/SomeAction', true);
http.setRequestHeader('Content-Type', 'application/json; charset=utf-8');
http.setRequestHeader('Content-Length', value.length);
http.onreadystatechange = function () {
if (http.readyState == 4 && http.status == 200) {
alert(http.responseText);
}
}
http.send(value);
</script>