0

別の MVC3 ページ (P2) を呼び出してから、ページ (P1) の呼び出しに戻る必要があります。ただし、P2 は自分自身を呼び出す必要があるため、リファラーが P2 になる可能性があります。

そう:

P1 - (P2 -> P2 -> P2) ->P1

問題は、P1 のリファラー URL を取得して保持し、後でそれを使用して P1 に戻るには、P2 がそれ自体を呼び出す回数に関係なく、どうすればよいかということです。

私はViewBag.Referrerを試してみました:

       <a href="@ViewBag.Referrer">Back</a>

次のコントローラーコードを使用して、元の呼び出しでのみ設定しようとします。ただし、ViewBag.Referrer は常に P2 リファラー URL を取得しているように見えましたが、デバッグ モードでは IsOriginalCall=0 のために ViewBag.Referrer をリセットしていませんでした。それは変だね。値ではなくポインターを格納しているようです。

        public ViewResult Index(int id = 0, int IsOriginalCall = 0)
    {
        if (IsOriginalCall =1)
        {
        if (Request.UrlReferrer != null)
        {
        ViewBag.Referrer = Request.UrlReferrer.LocalPath;
        }
        }
        ViewBag.SLIid = id == 0 ? 4 : id;

        return View(db.StdSection.Where(r=>r.InWizard).OrderBy(r=>r.Name).ToList());
    }

考えと解決策は大歓迎です。私はこれについてぐるぐる回っています。

前もって感謝します。

編集、TempData で 2 を試行:

呼び出しコード:

@Html.ActionLink("Sections", "Index","SSLI2", new { id=item.Id, ReturnUrl = Request.Url.ToString() },null)

コントローラ:

    public ViewResult Index(string ReturnUrl, int id = 0)
    {
        if (ReturnUrl != "x")
        {
        //ViewBag.Referrer = Request.UrlReferrer.LocalPath;
          TempData["Referrer"] = ReturnUrl;
        }
        ViewBag.SLIid = id == 0 ? 4 : id;

        return View(db.StdSection.Where(r=>r.InWizard).OrderBy(r=>r.Name).ToList());
    }

意見:

<a href="@TempData["Referrer"]">Back</a>

生成するもの:

<a href="">Back</a> when P2 goes back to P2, but seems to use P2 referrer URL ????
4

1 に答える 1

0

P1 クエリ文字列から in を渡し、ReferrerUrl値を に格納できますTempData。その後、あるアクション コールから別のアクション コールへの遷移を生き残ります。

ReferrerUrl別のオプションは、クエリ文字列で P1 からの inを渡し、その値を P2 の非表示の入力に入れることです。

@Html.HiddenFor(m => m.ReferrerUrl)

また

@Html.Hidden("ReferrerUrl", ViewBag.ReferrerUrl)

次に、各ポストバックで値を取得し、非表示の入力値として再度レンダリングします。

編集

次のようなことを試してみてください:

public ViewResult Index(string returnUrl, int id = 0)
{
    ViewBag.ReturnUrl = returnUrl;
    ViewBag.SLIid = id == 0 ? 4 : id;

    // This can be picked up in another action method.
    TempData["ReturnUrl"] = returnUrl;

    return View(db.StdSection.Where(r=>r.InWizard).OrderBy(r=>r.Name).ToList());
}

次に、次を使用してレンダリングします。

<a href="@Html.Raw(ViewBag.ReturnUrl)">Back</a>
于 2013-07-17T13:46:48.567 に答える