问题描述
我正在处理一个 .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 感谢您的帮助