我正在測驗我的代碼,將資料從視圖頁面傳遞到控制器創建方法。我嘗試使用 傳遞資料ajax,但是如何確保我的控制器方法確實是由 ajax 函式而不是 POST 請求方法呼叫的。
當我更改urlinajax或傳遞錯誤的id值作為ajax方法的輸入時,仍然會呼叫控制器方法并將回應訊息回傳給ajax函式。
讓我向您展示我的ajax代碼:
<script>
$(document).ready(function () {
$('#btn_submit').click(function () {
var testModel = {
FirstName: $('#First_Name').val(),
LastName: $('#LastName').val(),
Gender: $("input[name='Gender']:checked").val(),
Contact: $('#Contact').val(),
Faculty: $('#Faculty').val(),
RegNepaliDate: $('#inp_date').val()
};
alert(JSON.stringify(testModel));
$.ajax({
type: 'POST',
url: '@Url.Action("Edit", "TestModels")', /*"/TestModels/Create",*/
data: JSON.stringify(testModel),
contentType: 'application/json;charset=utf-8',
dataType: 'json',
success: function (data) {
if (response.success) {
alert(response.responseText);
}
},
error: function (req, status, error) {
console.log(error);
}
})
})
})
</script>
在上面的代碼,我已經過了錯url即url: '@Url.Action("Edit", "TestModels")',正確的網址應該是url: '@Url.Action("Create", "TestModels")',也是id的FirstName(將First_Name)和inp_date 是錯誤的,仍然是正確的控制器方法TestModels/Create被呼叫,也找回成功回應。
我的控制器方法:
// POST: TestModels/Create
[HttpPost]
[ValidateAntiForgeryToken]
public JsonResult Create(TestModel testModel, string LastName, string RegNepaliDate)
{
if (ModelState.IsValid)
{
//return null;
//db.TestModels.Add(testModel);
//db.SaveChanges();
//return Json("true", JsonRequestBehavior.AllowGet);
return Json(new { success = true, responseText = "Your message successfuly sent!" }, JsonRequestBehavior.AllowGet);
}
//return Json("false", JsonRequestBehavior.DenyGet);
return Json(new { success = false, responseText = "Error." }, JsonRequestBehavior.AllowGet);
}
我在視圖頁面中提交按鈕代碼:
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
<div class="form-horizontal">
<h4>TestModel</h4>
<hr />
@Html.ValidationSummary(true, "", new { @class = "text-danger" })
// input form
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" value="Create" class="btn btn-default" id="btn_submit" />
</div>
</div>
</div>
}
我很驚訝這是怎么可能的,在教程中他們只展示了如何通過 ajax 將資料從視圖傳遞到控制器,但他們從未展示如何檢查它是否真的是 ajax 呼叫或 POST 請求。請解釋我如何檢查這個。謝謝你!!!
uj5u.com熱心網友回復:
這是由于@using (Html.BeginForm())。因此,您的 ajax 方法不起作用。
當您在不帶任何引數的情況下呼叫 BeginForm() 時,它默認使用用于呈現當前頁面的相同控制器/動作。
請參考:(@Html.BeginForm() 是如何作業的?)
如果要呼叫 ajax 方法,則洗掉 Html.BeginForm() 語法
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/334850.html
標籤:查询 asp.net 阿贾克斯 asp.net-mvc asp.net-mvc-4
