私はいくつかの調査を行い、私が使用できることを発見しました:
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パラメーターを削除すると、フォームは保存されますが、正しくリダイレクトされません。
私がこれを行っている理由は、このフォームは複数のページからアクセス可能であり、フォームの送信後にすべてを1つのページに送信するのではなく、前のページに送信するためです。
編集
また、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);
}