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;
            }
        })

Post处理程序
 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');

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

的url
 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");
        }

并将window.location.href添加到ajax调用的成功函数

$.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谢谢你的帮助

最新更新