我有以下操作,从带有记录列表的屏幕调用。
[HttpPost]
//[Authorize(Roles = "admin")]
public ActionResult Edit(EditViewModel itemView)
{
一旦动作完成,我想返回调用动作的页面。但是我不想刷新那个页面。我只想使用类似于浏览器中“上一页”按钮的内容返回到填充的屏幕。现在,当我点击“保存”时,我的操作会执行以下操作:
return RedirectToAction("Index");
有没有办法使用MVC3重定向到上一页?
点击编辑后编辑回复帖子后的Stackoverflow功能。
答案 0 :(得分:2)
而不是重定向,
[HttpGet]
public ActionResult Index()
{
/// preform any processing necessary for your index page on GET
return View("Index");
}
[HttpPost]
public ActionResuit Edit(EditViewModel itemView)
{
if (ModelState.IsValid)
{
/// do whatever you want with your model...
}
// return the contents as they'd be rendered by the Index action
return Index();
}
请注意,使用此方法,浏览器中的网址仍会显示修改网址(如/area_name/edit
),但您可以通过以下方式修复:
history.back()
作为@AlanStephens建议但是,我怀疑这是否真的是最好的方法。通常,用户希望不同的URL可以执行不同的操作。
或者,如果我理解正确并且正在从索引页面调用编辑操作,
[HttpGet]
public ActionResult Index()
{
return View();
}
[HttpPost] /// from a form on Index
public ActionResult Index(EditViewModel model)
{
if (ModelState.IsValid)
{
////
}
return View();
}
并完全取消/Edit
。同样,我并不真正关心这种方法。
答案 1 :(得分:1)
根据您提供的代码,看起来您有一个分页屏幕,可以在每一行上单击编辑。以下是我过去解决这个问题的方法。
在“索引”页面上,当页面加载时,无论是来自主索引还是分页方法,请添加以下内容:
Session["CurrentUrl"] = Request.Url.ToString();
现在,在编辑页面的POST方法结束时,执行:
return Session["CurrentUrl"] == null ?
Index() :
Redirect(Session["CurrentUrl"]);
答案 2 :(得分:0)
使用ajax调用可以轻松实现您所描述的内容。这样你就可以执行你喜欢和之后的任何动作(成功响应),你可以使用javascript轻松地从当前页面导航。
如果您发布到页面并作为响应返回您使用GET请求(索引页面)收到的相同视图,则某些用户可能会按F5重新加载该索引页并在浏览器中收到警告,实际上是它会再次发送POST请求。这对用户来说非常混乱,并且不是真正的用户友好(更不用说与其相关的许多问题)。
虽然你不喜欢重定向方法,但由于额外的响应,我想,我应该说,在MVC中,这是正确的方法,假设你不想使用ajax调用。