我需要调用另一个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:
致电代码:
@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 ????
答案 0 :(得分:0)
您可以从P1查询字符串传递ReferrerUrl
,然后将值存储在TempData
中。然后它将从一个动作调用过渡到另一个动作调用。
另一种选择是在查询字符串中从P1传递ReferrerUrl
,然后将值放在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>