ここで質問を見てきました: MVC ajax json post to controller action method しかし、残念ながらそれは私を助けていないようです。私のメソッドシグネチャを除いて、私のものはまったく同じです(しかし、私はそれを試しましたが、まだヒットしません)。
$('#loginBtn').click(function(e) {
e.preventDefault();
// TODO: Validate input
var data = {
username: $('#username').val().trim(),
password: $('#password').val()
};
$.ajax({
type: "POST",
url: "http://localhost:50061/checkin/app/login",
content: "application/json; charset=utf-8",
dataType: "json",
data: JSON.stringify(data),
success: function(d) {
if (d.success == true)
window.location = "index.html";
else {}
},
error: function (xhr, textStatus, errorThrown) {
// TODO: Show error
}
});
});
[HttpPost]
[AllowAnonymous]
public JsonResult Login(string username, string password)
{
string error = "";
if (!WebSecurity.IsAccountLockedOut(username, 3, 60 * 60))
{
if (WebSecurity.Login(username, password))
return Json("'Success':'true'");
error = "The user name or password provided is incorrect.";
}
else
error = "Too many failed login attempts. Please try again later.";
return Json(String.Format("'Success':'false','Error':'{0}'", error));
}
しかし、私が何を試みても、Controller
はヒットしません。デバッグを通じて、リクエストを送信し、Not Found
毎回エラー。
アクションは文字列パラメーターを予期していますが、複合オブジェクトを送信しています。
送信するものと一致するオブジェクトを作成する必要があります。
public class Data
{
public string username { get;set; }
public string password { get;set; }
}
public JsonResult Login(Data data)
{
}
[〜#〜] edit [〜#〜]
さらに、toStringify()はおそらくここで必要なものではありません。オブジェクト自体を送信するだけです。
data: data,
これは、1つのオブジェクトを送信したためであり、2つのパラメーターが必要です。
これを試してみてください:
public class UserDetails
{
public string username { get; set; }
public string password { get; set; }
}
public JsonResult Login(UserDetails data)
{
string error = "";
//the rest of your code
}
これを試して:
/////// Controller post and get simple text value
[HttpPost]
public string Contact(string message)
{
return "<h1>Hi,</h1>we got your message, <br />" + message + " <br />Thanks a lot";
}
////ビューでJavascript(jQuery)ファイルへの参照を追加します
@section Scripts{
<script src="~/Scripts/modernizr-2.6.2.js"></script>
<script src="~/Scripts/jquery-1.8.2.intellisense.js"></script>
<script src="~/Scripts/jquery-1.8.2.js"></script>
<script src="~/Scripts/jquery-1.8.2.min.js"></script>
}
///その後、次のようにPostメソッドを追加します。
<script type="text/javascript">
/// post and get text value
$("#send").on("click", function () {
$.post('', { message: $('#msg').val() })
//// empty post('') means post to the default controller,
///we are not pacifying different action or controller
/// however we can define a url as following:
/// var url = "@(Url.Action("GetDataAction", "GetDataController"))"
.done(function (response) {
$("#myform").html(response);
})
.error(function () { alert('Error') })
.success(function () { alert('OK') })
return false;
});
ここで、$。AjaxとJSONを使用してそれを実行したいとします。
// Post JSON data add using System.Net;
[HttpPost]
public JsonResult JsonFullName(string fname, string lastname)
{
var data = "{ \"fname\" : \"" + fname + " \" , \"lastname\" : \"" + lastname + "\" }";
//// you have to add the JsonRequestBehavior.AllowGet
//// otherwise it will throw an exception on run-time.
return Json(data, JsonRequestBehavior.AllowGet);
}
次に、ビュー内で、タイプボタンの入力、または送信からのイベントクリックを追加します。JSONデータが適切にフォーマットされていることを確認してください。
$("#jsonGetfullname").on("click", function () {
$.ajax({
type: "POST",
contentType: "application/json; charset=utf-8",
url: "@(Url.Action("JsonFullName", "Home"))",
data: "{ \"fname\" : \"Mahmoud\" , \"lastname\" : \"Sayed\" }",
dataType: "json",
success: function (data) {
var res = $.parseJSON(data);
$("#myform").html("<h3>Json data: <h3>" + res.fname + ", " + res.lastname)
},
error: function (xhr, err) {
alert("readyState: " + xhr.readyState + "\nstatus: " + xhr.status);
alert("responseText: " + xhr.responseText);
}
})
});
乾杯、
マフムード・サイード