1

私はいくつかの調査を行い、私が使用できることを発見しました:

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);
        }
4

3 に答える 3

4

リダイレクトする前にフォームを保存するには、アクションメソッドでいくつかの行を切り替える必要があります。それ以外の:

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");
于 2012-04-18T19:54:16.710 に答える
1

このような?

@using(Html.BeginForm("act","contr",FormMethod.Post) {
            @Html.Hidden("returnUrl",ViewContext.HttpContext.Request.Url.PathAndQuery)
            <input type="submit" />
        }

BeginFormメソッドで同じものを渡すことに問題はないはずです-どちらもにバインドされActionMethod(string returnUrl)ます。

于 2012-04-18T19:44:50.607 に答える
1

私があなたを正しく理解しているなら、あなたは実際にACTIONフォームのメソッドを変更しているので、それが保存されなかったのは驚きではありません。私はそれを取り除き、あなたが最初に意図したようにコントローラー/アクションに投稿します。次に、を非表示の入力として追加しretUrlて、残りのフォームデータと一緒に投稿します。

@using (Html.BeginForm()) {
    @Html.EditorForModel()
    <input type="hidden" name="returnUrl" value="@retUrl" /> 
    <input type="submit" value="Save"/>
    } 

編集:

Htmlヘルパーを使用することもできます。

@Html.Hidden("returnUrl", retUrl)
于 2012-04-18T19:46:47.570 に答える