不能做重定向(ASP.NET MVC)



我需要重定向到控制器

这是我的控制器

[HttpPost]
public ActionResult Index(string question1, string question2, string question3, string question4, string question5, string question6, string question7, string question8, string question9, string question10, Int32 id)
{
QuestionBlock question = new QuestionBlock
{
Question1 = question1,
Question2 = question2,
Question3 = question3,
Question4 = question4,
Question5 = question5,
Question6 = question6,
Question7 = question7,
Question8 = question8,
Question9 = question9,
Question10 = question10,
Interview_Id = id,
};
//TempData["id"] = id;
db.QuestionBlocks.Add(question);
db.SaveChanges();
return Json(new { Result = "Success", Message = "Saved Successfully" }, JsonRequestBehavior.AllowGet);

I try to do it like this
return RedirectToAction("Index", "Questions", new { id = id });

我的观点中有这个 AJAX 调用。也许麻烦了?

<script>
$('.click').on('click', function () {
$('.content').toggle();
});
var counter = 0;
$(document).ready(function () {
$('#save').click(function () {
save();
});
});
function save()
{
$.ajax({
type: 'Post',
dataType: 'Json',
data: {
question1: $('#Question1').val(),
question2: $('#Question2').val(),
question3: $('#Question3').val(),
question4: $('#Question4').val(),
question5: $('#Question5').val(),
question6: $('#Question6').val(),
question7: $('#Question7').val(),
question8: $('#Question8').val(),
question9: $('#Question9').val(),
question10: $('#Question10').val(),
},
url: '@Url.Action("Index", "Questions")',
success: function (da) {
if (da.Result === "Success") {
alert('Вопросы сохранены');


} else {
alert( 'Error'+ da.Message);
}
},
error: function (da) {
alert('Error');
}
});
}
</script>

但是重定向不起作用。我的烦恼在哪里?

也许我需要不在控制器中执行此操作?

谢谢你的帮助

当前代码返回具有 2 个属性的 JSON 响应,并且主视图代码正在对此操作方法进行 ajax 调用。因此,从操作方法返回的 JSON 响应将在 ajax 调用的success处理程序中处理。除非您明确这样做,否则它不会执行重定向。

即使将return Json替换为return RedirectToAction,将其与 Ajax 调用一起使用也没有意义。ajaxization页面的整个想法是避免传统的页面提交 - 重新加载体验,并将其替换为部分页面上传行为(更好的用户体验)

如果绝对要重定向到另一个页面,可以在success事件处理程序中执行此操作。但就像我之前提到的,那么做一个 ajax 帖子是没有意义的。做一个普通的表格帖子!

if (da.Result === "Success") {
window.location.href="Give the new Url you want to navigate to here";
}

您可以使用 UrlHelper 类生成指向其他操作方法的正确 url,并将其作为 JSON 响应的一部分发送。

var urlBuilder = new UrlHelper(Request.RequestContext);
var url = urlBuilder.Action("Index", "Questions",new { id= id});
return Json(new { Result = "Success", Message = "Saved Successfully",RedirectUrl=url });

现在在您的 ajax 调用中,读取RedirectUrl属性

if (da.Result === "Success") {
window.location.href=da.RedirectUrl;
}

你有没有这样尝试过而不写问题。

return RedirectToAction("Index", new { id = yourvalue });

编辑:

否则,您可以尝试以下操作:

return RedirectToAction( "Index", new RouteValueDictionary( 
new { controller = controllerName, action = "Index", id = id } ) );

最新更新