簡體   English   中英

來自ASP.NET MVC3中的Form的ReturnUrl

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM