我的控制器中有以下MVC 5操作
控制器
public ActionResult Nominations(int id, string feedback)
{
//code here
}
此操作的Razor视图包含一个隐藏文本框。当用户点击模态确认框上的提交按钮时,会调用一个JQuery函数,该函数包含一个AJAX调用,用于获取隐藏文本框中的值,然后将其传递给我的MVC控制器中的Action。
JQuery的
$("#mySubmit").click(function () {
$.ajax({
type: "POST",
url: "/MyController/Delete/",
data: { userID: $("#hiddenID").val() },
success: function (result) {
$('#myModal').modal('hide');
},
error: function (result) {
alert('error');
}
});
});
控制器
[HttpPost]
public ActionResult Delete(int userID)
{
var user = _userService.GetUserByID(userID);
if(!String.IsNullOrEmpty(user.userID))
{
_userService.Delete(userID);
_userService.Save();
}
return RedirectToAction("Index", new { id = userID, feedback = "Deleted" });
}
public ActionResult Index(int userID, string feedback)
{
//code here
}
将值传递给Controller中的Delete Action,执行删除功能(删除记录),然后将userID和feedback参数传递给Index Action。
这就是问题所在,虽然删除功能发生了,我可以看到传递给索引操作的参数(用户ID和反馈),然后显示给用户的视图不会改变,即用户虽然我在调试时看到正在执行的代码,但是应用程序仍保留在提名视图中,因此不会重定向到索引视图。
为什么会这样?我需要将用户重定向到索引视图。
此外,我用JQuery函数代替AJAX调用,用一个更简单的JQUery Post替换它
$.post("/MyController/Delete/", { userID: $("#hiddenID").val() });
但问题是,在发生删除后,模态弹出窗口不会关闭。
对此的任何帮助将不胜感激。
感谢。
答案 0 :(得分:3)
因为您正在执行AJAX请求,所以它不会在成功时重新加载用户的浏览器页面,它只会返回在result参数中调用的action方法的结果。此外,$.post
只是$.ajax
的简写版本,因此行为将是相同的(模式不会因为您未提供成功回调而发生变化)。
如果您想要在成功时加载其他视图,可以在window.location
成功回调中使用$.ajax
。
答案 1 :(得分:3)
您需要执行以下操作:
$("#mySubmit").click(function () {
$.ajax({
type: "POST",
url: "/MyController/Delete/",
data: { userID: $("#hiddenID").val() },
success: function (result) {
$('#myModal').modal('hide');
window.location.href
= "@Url.Content("~/controllername/Index")"
+"?id="+userID+"&feedback=Deleted";
},
error: function (result) {
alert('error');
}
});
});