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 Referrer 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

您可以ReferrerUrl从 P1 查询字符串传入,然后将值存储在TempData. 然后它将在从一个动作调用到另一个动作调用的过渡中幸存下来。

另一种选择是ReferrerUrl在查询字符串中从 P1 传入,然后将值放在 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 回答