Ajax 调用未使用剃刀页面重定向到所需页面

问题描述

我正在处理一个 .NET Core 3.1 razor 页面项目,并且在我的一个页面上,我有一个关于提交表单详细信息的 AJAX 调用。单击按钮时,我点击了帖子处理程序,ModelState 有效,但帖子未重定向到所需页面。我已尝试使用 devtools 调试 AJAX 调用,但未命中我的成功和失败函数

我哪里出错了?

Javascript

  $.ajax({
            url: "/Candidate/Add?handler=Candidate",type: 'POST',contentType: 'application/json',dataType: 'json',beforeSend: function (xhr) {
                xhr.setRequestHeader("XSRF-TOKEN",$('input:hidden[name="__RequestVerificationToken"]').val());
            },data: JSON.stringify(candidate),success: function (data) {
                //alert('success');
                var t = data;
            },failure: function (data) {
                var f = data;
            }
        })

发布处理程序

 public async Task<IActionResult> OnPostCandidateAsync([FromBody] CandidateModel candidate)
        {
            if (!ModelState.IsValid)
            {
                IdTypeOptions = idTypeRepository.GetIDTypes().Result.Select(a => new SelectListItem
                {
                    Value = a.Id.ToString(),Text = a.Name
                }).ToList();

                industryOptions = industryRepository.GetIndustries().Result.Select(a => new SelectListItem
                {
                    Value = a.Id.ToString(),Text = a.Name
                }).ToList();

                GenderOptions = genderRepository.GetGender().Result.Select(g => new SelectListItem
                {
                    Value = g.Id.ToString(),Text = g.Name
                }).ToList();

                return Page();
            }


            //candidateModel.UserId = 

            var id = await candidateRepository.AddCandidate(candidate);

            //return ()
            return RedirectToPage("./Index");
        }

任何帮助将不胜感激

解决方法

ajax 调用总是返回一些数据或部分视图,但不会在动作内部重定向。

你必须修复 ajax 的成功

             .....
             data: ....,success: function (data) {
               window.location.href ...
               //or 
              window.open(....)
            },error: function (jqXHR,exception) {
              ...error code
                    }
           });

如果你想打开另一个页面使用

window.location.href = 'http://...;' //the full url of razor page

如果你想在另一个窗口打开页面

window.open('the full url of razor page');
,

我必须在我的帖子处理程序上返回 JsonResult 并传递我想重定向到的网址

 public async Task<IActionResult> OnPostCandidateAsync([FromBody] CandidateModel candidate)
        {
            if (!ModelState.IsValid)
            {
                IdTypeOptions = idTypeRepository.GetIDTypes().Result.Select(a => new SelectListItem
                {
                    Value = a.Id.ToString(),Text = a.Name
                }).ToList();

                industryOptions = industryRepository.GetIndustries().Result.Select(a => new SelectListItem
                {
                    Value = a.Id.ToString(),Text = a.Name
                }).ToList();

                GenderOptions = genderRepository.GetGender().Result.Select(g => new SelectListItem
                {
                    Value = g.Id.ToString(),Text = g.Name
                }).ToList();

                return Page();
            }


            //candidateModel.UserId = 

            var id = await candidateRepository.AddCandidate(candidate);

            return new JsonResult("/Candidate/Index");
            //return ()
            //return RedirectToPage("./Index");
        }

并在ajax调用的成功函数上添加window.location.href

$.ajax({
            url: "/Candidate/Add?handler=Candidate",type: 'POST',contentType: 'application/json',dataType: 'json',beforeSend: function (xhr) {
                xhr.setRequestHeader("XSRF-TOKEN",$('input:hidden[name="__RequestVerificationToken"]').val());
            },data: JSON.stringify(candidate),success: function (data) {
               
                window.location.href = data;
            },failure: function (data) {
                var f = data;
            }
        })

@Serge 感谢您的帮助