Ajax 发布返回成功但在调试时未在 VS 中达到断点

Posted

技术标签:

【中文标题】Ajax 发布返回成功但在调试时未在 VS 中达到断点【英文标题】:Ajax post returning success but not hitting the break point in VS while debugging 【发布时间】:2021-09-28 00:31:25 【问题描述】:

我正在使用剃须刀页面编写一个 .net core 3.1 项目,并且我有一个表单,该表单具有类型按钮的输入,我在该表单上为 onclick 事件编写了一个 ajax 帖子。测试按钮时单击 ajax 请求的成功功能正在执行,但我的断点在 Visual Studio 中没有被击中

我的表格

            @page
            @model IndexModel
            @
                ViewData["Title"] = "Home page";
             
    
            <div class="text-center">
        <form method="post">
            <div class="form-group row">
                <div class="col-md-3">
                    <label asp-for="Model.Name"></label>
                </div>
                <div class="col-md-9">
                    <input asp-for="Model.Name" id="Name" value="" class="form-control" />
                </div>
            </div>
    
            <div class="col-md-12">
                <input type="button" class="submit btn btn-primary" value="Submit" />
            </div>
        </form>
    </div>

@section scripts
    <script src="~/js/test.js"></script>

我的 jquery

        $(document).ready(function () 
            $(".submit").on('click', function () 

        var formData = new FormData();
        formData.append('name', $('#Name').val());
        $.ajax(
            url: '/?handler=OnPostModelAsync',
            type: 'POST',
            async:true,
            contentType: 'application/json',
            //dataType: 'json',
            beforeSend: function (xhr) 
                xhr.setRequestHeader("XSRF-TOKEN",
                    $('input:hidden[name="__RequestVerificationToken"]').val());
            ,
            data: JSON.stringify(formData),
            success: function () 
                alert("success");
            ,
            failure: function () 
                alert("failure-");
            

        )
    )
)

我的服务器端代码

        using AjaxPostRazorPages.Models;
        using Microsoft.AspNetCore.Mvc;
        using Microsoft.AspNetCore.Mvc.RazorPages;
        using Microsoft.Extensions.Logging;
       using System.Threading.Tasks;

        namespace AjaxPostRazorPages.Pages
        
            public class IndexModel : PageModel
           
        private readonly ILogger<IndexModel> _logger;

        public IndexModel(ILogger<IndexModel> logger)
        
            _logger = logger;
        


        public TestModel Model  get; set; 
        public async Task<IActionResult> OnGetAsync()
        
            return Page();
        

        [ValidateAntiForgeryToken]
        [HttpPost]
        public async Task<IActionResult> OnPostModelAsync([FromBody] TestModel model)
        
            return Page();
        
    

我做错了什么,任何帮助将不胜感激

【问题讨论】:

你的突破点在哪里? 【参考方案1】:

首先,没有充分的理由将 JSON 发布到 Razor 页面。如果您想在应用程序中使用 JSON,您应该使用 API 控制器。只需发布表单内容即可。

接下来,

网址:'/?handler=OnPostModelAsync'

应该是

url: '/?handler=Model'

您不要在处理程序名称中包含处理程序方法名称的OnPostOnGetAsync 部分:https://www.learnrazorpages.com/razor-pages/handler-methods#named-handler-methods

其他:

    从方法中删除HttpPost 属性。根据作为 Razor Pages 中方法名称一部分的动词,方法与动词匹配。 删除ValidateAntiForgeryToken 属性。默认情况下,它们在 Razor 页面中经过验证。 在您的Model 属性上使用BindProperty 属性,而不是添加它的另一个实例作为处理程序方法参数。

这是修改后的 PageModel:

public class IndexModel : PageModel

    [BindProperty]
    public TestModel Model  get; set; 
    public void OnGet()
    
    
    public IActionResult OnPostModelAsync()
    
        return Page();
    

这是修改后的 jQuery:

$(document).ready(function () 
    $(".submit").on('click', function (e) 
        e.preventDefault();

        $.ajax(
            url: '/?handler=Model',
            type: 'POST',
            data: $(this).closest('form').serialize(),
            success: function () 
                alert("success");
            ,
            failure: function () 
                alert("failure-");
            

        )
    )
)

【讨论】:

以上是关于Ajax 发布返回成功但在调试时未在 VS 中达到断点的主要内容,如果未能解决你的问题,请参考以下文章

返回屏幕时未在 React Native 中调用 useEffect

显示键盘时未在移动设备中触发提交事件

更新时未在返回的实体上设置标记为可更新 = 假的弹簧数据审核字段

[dagster管道在使用`execute_pipeline`运行时成功执行,但在使用dagit运行时未成功执行

debug-vuejs-from-vs-code:在 chrome 中调试 vueJS 应用程序时未绑定断点

调试器未在 .NET 代码中命中断点