C# AJAX调用是否在Razor页面中重新加载我的整个页面?

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

我正在尝试从我的Razor页面执行AJAX调用

JavaScript: 代码隐藏: 而且,事实上,这是正确的工作和项目被删除

但是,将调用$.ajax.fail处理程序,错误表明存在NullReferenceException

在my markup CSHTML文件中引发了异常:

@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,我就在那里!;,然后不调用失败处理程序。所以这是一个很大的帮助。虽然我还是不明白为什么。