ASP.NET CORE 3.0 Jquery Ajax请求成功有时不在同一视图中执行

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ASP.NET CORE 3.0 Jquery Ajax请求成功有时不在同一视图中执行相关的知识,希望对你有一定的参考价值。

这分别是我的视图,ajax请求和控制器。问题是当我保存某些内容时,有时它会在ajax请求中触发成功方法,有时却没有。

查看

        <form id="myForm">
        <div>
            <div class="row">
                <div class="col-12">
                    <label asp-for="RoleName" class="control-label"></label>
                </div>
            </div>
            <div class="row">
                <div class="col-10">
                    <input asp-for="RoleName" class="form-control" />
                    <span asp-validation-for="RoleName" class="text-danger"></span>
                </div>
                <div class="col-2">
                    <div>
                        <button value="Index" id="btnSave" class="btn btn-success" data-toggle="tooltip" data-placement="bottom" title="Save !"><i class="fa fa-save"></i></button>
                    </div>
                </div>
            </div>
        </div>
    </form>

Ajax请求

        $("#btnSave").click(function () 

        debugger;

        var RoleObj =  RoleName: $('#RoleName').val() ;

        $.ajax(
            cache: false,
            type: "POST",
            contentType: "application/json; charset=utf-8",
            url: '@Url.Action("Index", "MasterRoles")',
            dataType: "json",
            data: JSON.stringify(RoleObj),
            headers:  RequestVerificationToken: $('input:hidden[name="__RequestVerificationToken"]').val() 
        ).done(function (response) 
            alert('Success');
        ).fail(function (jqXHR, textStatus) 
            alert('Error');
        );
    );

这是在post方法中调用的控制器。数据发布的唯一问题是有时成功获取返回值,但并非总是如此

      [HttpPost]
    [ValidateAntiForgeryToken]
    public async Task<JsonResult> Index([Bind("RoleName")] [FromBody] MasterRole masterRole)
    
        try
        
            if (ModelState.IsValid)
            
                _context.Add(masterRole);
                await _context.SaveChangesAsync();

                return Json(new  status = "1", roleList );
            
            else
            
                return Json(new  status = "2", roleList );
            
        
        catch (Exception ex)
        
            return Json(new  status = "2" );
        
    
答案

我怀疑您的表单是在单击按钮时提交的,这就是为什么您有时看不到ajax函数被调用的原因。

您需要忽略默认的鼠标单击按钮,因为这将提交表单:

$("#btnSave").click(function (e) 
  e.preventDefault();
  debugger;
  var RoleObj =  RoleName: $("#RoleName").val() ;
  $.ajax(
    cache: false,
    type: "POST",
    contentType: "application/json; charset=utf-8",
    url: '@Url.Action("Index", "MasterRoles")',
    dataType: "json",
    data: JSON.stringify(RoleObj),
    headers: 
      RequestVerificationToken: $(
        'input:hidden[name="__RequestVerificationToken"]'
      ).val(),
    ,
  )
    .done(function (response) 
      alert("Success");
    )
    .fail(function (jqXHR, textStatus) 
      alert("Error");
    );
);

以上是关于ASP.NET CORE 3.0 Jquery Ajax请求成功有时不在同一视图中执行的主要内容,如果未能解决你的问题,请参考以下文章

.NET Core 3.0及ASP.NET Core 3.0 前瞻

ASP.NET Core 2.2 MVC MapRoute 项目到 ASP.NET 3.0 端点 MapAreaControllerRoute “找不到此本地主机页面”

从 ASP.NET Core 2.2 升级到 3.0

Linq 查询在 ASP.NET-Core 3.0 及更高版本中对数字等字符串进行排序

将 OpenID Connect 与 .NET Core 3.0 ASP.NET Core API 服务一起使用时出错

深入研究 Angular 和 ASP.NET Core 3.0