我做了一些研究,发现我可以使用:
string retUrl = "";
if (ViewContext.HttpContext.Request.UrlReferrer != null)
{
retUrl =
ViewContext.HttpContext.Request.UrlReferrer.PathAndQuery;
}
作为一种设置 returnUrl 的方法,然后通过操作链接将其传递给控制器。
但是,有什么方法可以将参数从表单传递到控制器?
这是我的代码现在的样子:
@using (Html.BeginForm(new { returnUrl = retUrl})) {
@Html.EditorForModel()
<input type="submit" value="Save"/>
}
这很有效,因为它会在您提交表单时将您返回到正确的 URL。但是,表单实际上并没有得到保存。如果我删除了 returnUrl 参数,它会保存表单,但不会正确重定向。
我这样做的原因是因为可以从多个页面访问此表单,我不想在他们提交表单后将它们全部发送到一个页面,而是发送到前一页。
编辑
我也试过 BeginRouteForm 并指定一个控制器和动作,这两种方法都不起作用。
编辑
动作来源:
[Authorize]
[HttpPost]
public ActionResult EditReview(Review review, string returnUrl)
{
if (ModelState.IsValid)
{
if (Url.IsLocalUrl(returnUrl) && returnUrl.Length > 1 && returnUrl.StartsWith("/")
&& !returnUrl.StartsWith("//") && !returnUrl.StartsWith("/\\"))
{
return Redirect(returnUrl);
}
reviewRepository.SaveReview(review);
return RedirectToAction("Index");
}
return View(review);
}