确保控制器方法实际被 ajax 或 POST 请求在 mvc 中调用
assure that the controller method is actually called by ajax or by POST request in mvc
我正在测试我的代码,将数据从视图页面传递到控制器创建方法。我尝试使用 ajax
传递数据,但我如何确定 我的控制器方法确实是由 ajax 函数而不是 POST 请求方法.
当我在 ajax
中更改 url
或在 ajax
方法中传递错误的 id
值作为输入时,仍然会调用控制器方法并返回返回 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: '@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 请求。请解释一下如何检查这个。谢谢!!!
这是由于@using (Html.BeginForm())。因此,您的 ajax 方法无效。
当您在不带任何参数的情况下调用 BeginForm() 时,它默认使用与呈现当前页面相同的 controller/action。
请参考:(How does @Html.BeginForm() works?)
如果要调用 ajax 方法,请删除 Html.BeginForm() 语法
我正在测试我的代码,将数据从视图页面传递到控制器创建方法。我尝试使用 ajax
传递数据,但我如何确定 我的控制器方法确实是由 ajax 函数而不是 POST 请求方法.
当我在 ajax
中更改 url
或在 ajax
方法中传递错误的 id
值作为输入时,仍然会调用控制器方法并返回返回 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: '@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 请求。请解释一下如何检查这个。谢谢!!!
这是由于@using (Html.BeginForm())。因此,您的 ajax 方法无效。
当您在不带任何参数的情况下调用 BeginForm() 时,它默认使用与呈现当前页面相同的 controller/action。
请参考:(How does @Html.BeginForm() works?)
如果要调用 ajax 方法,请删除 Html.BeginForm() 语法