次のスクリプトを使用して、ajax関数のデータを使用して送信されている変数にアクセスしようとしていますが、アクセスできませんでした。
<script>
$('#inline-username').click(function () {
var comments = $('#inline-username').val();
//var selectedId = $('#hdnSelectedId').val();
$.ajax({
url: '@Url.Action("UpdateOrder")', // to get the right path to controller from TableRoutes of Asp.Net MVC
dataType: "json", //to work with json format
type: "POST", //to do a post request
contentType: 'application/json; charset=utf-8', //define a contentType of your request
cache: false, //avoid caching results
data: { test: $(this).text() }, // here you can pass arguments to your request if you need
success: function (data) {
// data is your result from controller
if (data.success) {
alert(data.message);
}
},
error: function (xhr) {
alert('error');
}
});
});
これがコントローラーのアクションです
public ActionResult UpdateOrder()
{
// some code
var test = Request.Form["test"];
return Json(new { success = true, message = "Order updated successfully" }, JsonRequestBehavior.AllowGet);
}
私は試した Request.Form["test"]
しかし、その値はnullです。 data
のオブジェクトをどのように受け取る必要がありますか?
ActionResultはGET
であり、ActionResultの入力パラメーターがないため、これらを変更するか、以下を参照してください。
<script>
$('#inline-username').click(function () {
var comments = $('#inline-username').val();
//var selectedId = $('#hdnSelectedId').val();
$.ajax({
url: /ControllerName/ActionName
dataType: "json",
type: "GET",
contentType: 'application/json; charset=utf-8', //define a contentType of your request
cache: false,
data: { test: comments },
success: function (data) {
// data is your result from controller
if (data.success) {
alert(data.message);
}
},
error: function (xhr) {
alert('error');
}
});
});
次に、コントローラー内で:
public ActionResult UpdateOrder(string test)
{
// some code
return Json(new { success = true, message = "Order updated successfully" }, JsonRequestBehavior.AllowGet);
}
更新
POST
を使用する場合は、呼び出すアクションは次のように[HttpPost]
である必要があることに注意してください。
[HttpPost]
public ActionResult Example()
ActionResultの上にHTTPがない場合、デフォルトではGet
。
アクションメソッドに[HttpPost]属性のマークを付けましたか。 ?
この投稿は私を大いに助けてくれました。 GETを実行しましたが、POST [HttpPost]だけで内部サーバーエラーが発生します:
[HttpPost]
public ActionResult SaveOrder(int id, string test, string test2)
そのため、JSON.stringifyを使用してparamsデータを設定する必要があり、それが機能しました。 POSTに対する私の完全なajaxリクエスト:
$.ajax({
url: "/Home/SaveOrder",
dataType: "json",
type: "POST",
contentType: 'application/json; charset=utf-8', //define a contentType of your request
cache: false,
data: JSON.stringify({ id:2, test: "test3", test2: "msj3" }),
success: function (data) {
// data is your result from controller
if (data.success) {
alert(data.message);
}
},
error: function (xhr) {
alert('error');
}
});
Actionメソッドは[HttpPost]属性で装飾する必要があります。デバッガーを使用して、実際にそのメソッドを呼び出していることを確認しましたか?
いつでもC#でビューモデルを定義し、それをpostメソッドのパラメーターとして受け入れることができます-値の名前がモデルと同じである限り、Asp.MVCはpostデータを解析します。