我需要重定向到控制器
这是我的控制器
[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 } ) );