c# - AJAX 调用是否会在 Razor Pages 中重新加载我的整个页面?
问题描述
我正在尝试从我的 Razor Pages 页面进行 AJAX 调用。
JavaScript:
$.ajax({
type: 'POST',
url: '?handler=Delete',
data: {
id: $(this).data('id')
},
beforeSend: function (xhr) {
// Required for POST, but have same issue if I removed this
// and use GET
xhr.setRequestHeader('XSRF-TOKEN',
$('input:hidden[name="__RequestVerificationToken"]').val());
},
})
.fail(function (e) {
alert(e.responseText);
})
.always(function () {
// Removed to simplify issue
//location.reload(true);
});
后面的代码:
public async System.Threading.Tasks.Task OnPostDeleteAsync(int id)
{
string userId = UserManager.GetUserId(User);
var area = DbContext.Areas.FirstOrDefault(a => a.UserId == userId && a.Id == id);
if (area != null)
{
DbContext.Remove(area);
await DbContext.SaveChangesAsync();
}
}
而且,事实上,这可以正常工作并且该项目已被删除。
但是,$.ajax.fail()
处理程序被调用并且错误表明存在NullReferenceException
.
在我的标记(CSHTML 文件)中引发了异常:
@if (Model.ActiveAreas.Count == 0) @***** NullReferenceException here! *****@
{
<div class="alert alert-info">
You don't have any active life areas.
</div>
}
出现此异常的原因是因为我的页面模型的所有属性都是空的。它们为空,因为OnGetAsync()
从未调用我的方法来初始化它们!
我的问题是为什么我的标记执行起来好像我正在更新整个页面?我正在做一个 AJAX 调用。我不想更新整个页面。所以我不知道为什么我OnGetAsync()
需要被调用。
解决方案
(根据您提供的代码)
我认为您的always()
回调函数或Cliek
事件或您的返回语句存在问题。
总是():
always()
无论 AJAX 请求是成功还是失败,只要 AJAX 请求完成,就会调用传递给该函数的回调函数。传递给回调函数的三个参数将是传递给done()
或的相同的三个参数fail()
,这取决于 AJAX 请求是成功还是失败。
响应成功的请求,该函数的参数与.done(): data, textStatus, and the jqXHR object
. 对于失败的请求,参数与 的参数相同.fail(): the jqXHR object, textStatus, and errorThrown
。
该deferred.always()
方法接收用于.resolve()
或.reject()
Deferred 对象的参数,这些参数通常非常不同。出于这个原因,最好只将它用于不需要检查参数的操作。在所有其他情况下,请使用显式.done()
或.fail()
处理程序,因为参数将具有众所周知的顺序。
参考:
或者
Cliek 事件: 我认为您的按钮正在触发页面刷新。所以preventDefault()
在你的点击事件中使用。
例子:
$('...').on('click', function (event) {
event.preventDefault();//add the prevent default.
//Your code
});
或者
返回声明:如果您的OnPostDelete
方法返回Page()
,请将其更改为JsonResult
or RedirectToPage
。
例子:
public Task<IActionResult> OnPostDelete(int? id)
{
if (id == null)
{
return NotFound();
}
//Your Code
return Page();//Remove it
return new JsonResult ("Customer Deleted Successfully!");// Use some thing like it as u need.
return RedirectToPage("./Index");//if u want to reload page then use it.
}
推荐阅读
- python - 从元组列表中替换元组的元素 - Python
- go - 在 net.DialTCP 中指定本地 IP 地址抛出错误绑定:地址已在使用中
- c++ - MacOS gcc dylib 和 clang 应用程序 - 异常处理问题
- devops - 秘密服务器 - 我无法访问 superdev 秘密
- html - 在 html 和 docx 中的 Caption 中具有不同样式的几行 - flextable
- assembly - 电路解码所需的最小输入位数
- angular - 如何在 Angular Material 中拥有“简单”的可替换占位符文本?
- python - 如何在本地图像上应用带有请求库的 Azure OCR API?
- r - R - 将数据帧从长格式转换为具有多个值列的宽格式
- flutter - Flutter Google Maps 断言失败:第 24 行 pos 16:'target != null':不正确