C# AJAX调用是否在Razor页面中重新加载我的整个页面?
我正在尝试从我的Razor页面执行AJAX调用 JavaScript: 代码隐藏: 而且,事实上,这是正确的工作和项目被删除 但是,将调用$.ajax.fail处理程序,错误表明存在NullReferenceException 在my markup CSHTML文件中引发了异常:C# AJAX调用是否在Razor页面中重新加载我的整个页面?,c#,jquery,ajax,asp.net-core,razor-pages,C#,Jquery,Ajax,Asp.net Core,Razor Pages,我正在尝试从我的Razor页面执行AJAX调用 JavaScript: 代码隐藏: 而且,事实上,这是正确的工作和项目被删除 但是,将调用$.ajax.fail处理程序,错误表明存在NullReferenceException 在my markup CSHTML文件中引发了异常: @if (Model.ActiveAreas.Count == 0) @***** NullReferenceException here! *****@ { <div class="alert ale
@if (Model.ActiveAreas.Count == 0) @***** NullReferenceException here! *****@
{
<div class="alert alert-info">
You don't have any active life areas.
</div>
}
出现此异常的原因是,我的页面模型的所有属性都为null。它们为空,因为从未调用我的OnGetAsync方法来初始化它们
我的问题是,为什么我的标记会像更新整个页面一样执行?我正在做一个AJAX调用。我不想更新整个页面。所以我不知道为什么我的OnGetAsync需要被调用
基于您提供的代码
我认为您的问题在于始终回调函数、Cliek事件或return语句
始终:
无论AJAX请求是否成功或失败,只要AJAX请求完成,就会调用传递给always函数的回调函数。传递给回调函数的三个参数将与传递给done或fail的三个参数相同,这取决于AJAX请求是成功还是失败
为了响应成功的请求,函数的参数与.done的参数相同:data、textStatus和jqXHR对象。对于失败的请求,参数与.fail的参数相同:jqXHR对象、textStatus和errorThrown
deferred.always方法接收用于.resolve或.reject延迟对象的参数,这些参数通常非常不同。因此,最好仅将其用于不需要检查参数的操作。在所有其他情况下,请使用显式.done或.fail处理程序,因为参数将具有众所周知的顺序
参考:
或
Cliek事件:我认为您的按钮正在触发页面刷新。因此,在单击事件中使用preventDefault
例如:
$('...').on('click', function (event) {
event.preventDefault();//add the prevent default.
//Your code
});
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.
}
或
Return语句:如果OnPostDelete方法返回页面,请将其更改为JsonResult或RedirectToPage
例如:
$('...').on('click', function (event) {
event.preventDefault();//add the prevent default.
//Your code
});
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.
}
基于您提供的代码
我认为您的问题在于始终回调函数、Cliek事件或return语句
始终:
无论AJAX请求是否成功或失败,只要AJAX请求完成,就会调用传递给always函数的回调函数。传递给回调函数的三个参数将与传递给done或fail的三个参数相同,这取决于AJAX请求是成功还是失败
为了响应成功的请求,函数的参数与.done的参数相同:data、textStatus和jqXHR对象。对于失败的请求,参数与.fail的参数相同:jqXHR对象、textStatus和errorThrown
deferred.always方法接收用于.resolve或.reject延迟对象的参数,这些参数通常非常不同。因此,最好仅将其用于不需要检查参数的操作。在所有其他情况下,请使用显式.done或.fail处理程序,因为参数将具有众所周知的顺序
参考:
或
Cliek事件:我认为您的按钮正在触发页面刷新。因此,在单击事件中使用preventDefault
例如:
$('...').on('click', function (event) {
event.preventDefault();//add the prevent default.
//Your code
});
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.
}
或
Return语句:如果OnPostDelete方法返回页面,请将其更改为JsonResult或RedirectToPage
例如:
$('...').on('click', function (event) {
event.preventDefault();//add the prevent default.
//Your code
});
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.
}
当ajax调用完成时,页面不是正在重新加载吗?因为总是回调中的location.reloadtrue?@JoshuaRobinson:错误显示在我的失败处理程序中。我相信在我刷新页面之前会调用它。此外,重新加载页面应该可以正常工作。至少,当我一开始进入页面时是这样的。@JoshuaRobinson:我刚刚在Chrome调试器中确认,fail在always之前运行。“Model.ActiveAreas”为null,请找出原因,您提供的代码中没有显示。您图像中的堆栈跟踪清楚地说明异常发生的位置。如果您也发布这些代码,那么帮助您就容易多了。当ajax调用完成时,您的页面不是在重新加载吗?因为总是回调中的location.reloadtrue?@JoshuaRobinson:错误显示在我的失败处理程序中。我相信在我刷新页面之前会调用它。此外,重新加载页面应该可以正常工作。至少,当我一开始进入页面时是这样的。@JoshuaRobinson:我刚刚在Chrome调试器中确认,fail在always之前运行。“Model.ActiveAreas”为null,请找出原因,您提供的代码中没有显示。您图像中的堆栈跟踪清楚地说明异常发生的位置。如果您也发布这些代码,那么帮助您就容易多了。@JonathanWood always函数在AJAX请求完成时被调用,而不管是什么时候
AJAX请求成功与否失败失败处理程序将显示问题中的错误。这在调用always处理程序之前发生。因此,问题不可能总是由行为引起的。这一切都是因为我不知道怎么总是会导致我看到的问题。@JonathanWood我想你的按钮会触发页面刷新。因此,在单击事件中使用preventDefault。请参阅我的更新答案。元素为。无论如何,我尝试添加preventDefault,但没有任何区别。使用JsonResult实际上可以阻止错误!因为这是一个AJAX调用,所以我永远不想返回页面。但是如果我返回新的JSONResult,我就在那里!;,然后不调用失败处理程序。所以这是一个很大的帮助。尽管我仍然不明白为什么。@JonathanWood总是在AJAX请求完成时调用函数,而不管AJAX请求是否成功。我的问题中的错误是由失败处理程序显示的。这在调用always处理程序之前发生。因此,问题不可能总是由行为引起的。这一切都是因为我不知道怎么总是会导致我看到的问题。@JonathanWood我想你的按钮会触发页面刷新。因此,在单击事件中使用preventDefault。请参阅我的更新答案。元素为。无论如何,我尝试添加preventDefault,但没有任何区别。使用JsonResult实际上可以阻止错误!因为这是一个AJAX调用,所以我永远不想返回页面。但是如果我返回新的JSONResult,我就在那里!;,然后不调用失败处理程序。所以这是一个很大的帮助。虽然我还是不明白为什么。