[英]ReturnUrl from Form in ASP.NET MVC3
我進行了一些研究,發現可以使用:
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);
}
要在重定向之前保存表單,您需要在action方法中切換一些行。 代替:
if (Url.IsLocalUrl(returnUrl) && returnUrl.Length > 1 && returnUrl.StartsWith("/")
&& !returnUrl.StartsWith("//") && !returnUrl.StartsWith("/\\"))
{
return Redirect(returnUrl);
}
reviewRepository.SaveReview(review);
return RedirectToAction("Index");
至
reviewRepository.SaveReview(review);
if (Url.IsLocalUrl(returnUrl) && returnUrl.Length > 1 && returnUrl.StartsWith("/")
&& !returnUrl.StartsWith("//") && !returnUrl.StartsWith("/\\"))
{
return Redirect(returnUrl);
}
return RedirectToAction("Index");
像這樣?
@using(Html.BeginForm("act","contr",FormMethod.Post) {
@Html.Hidden("returnUrl",ViewContext.HttpContext.Request.Url.PathAndQuery)
<input type="submit" />
}
在BeginForm方法中傳遞相同內容應該沒有任何問題-兩者都將綁定到ActionMethod(string returnUrl)
。
如果我正確地理解了您,那么您實際上是在更改表單上的ACTION
方法,因此並不奇怪它沒有保存。 我會擺脫它,然后按照您的原意將其發布到控制器/操作中。 然后將retUrl
添加為隱藏輸入,以與其余表單數據一起發布。
@using (Html.BeginForm()) {
@Html.EditorForModel()
<input type="hidden" name="returnUrl" value="@retUrl" />
<input type="submit" value="Save"/>
}
編輯:
您還可以使用HTML幫助器。
@Html.Hidden("returnUrl", retUrl)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.