在后续部分视图加载后使用后退按钮

时间:2015-08-18 20:48:51

标签: javascript jquery asp.net-mvc

我目前有一种可能非正统的方式直接链接到具有所需部分视图的父视图。我的父视图呈现部分视图,具体取决于从初始请求中获取的ViewBag变量。

 public ActionResult Index(Guid clientId, string section)
    {
        if (!string.IsNullOrEmpty(section))
        {
            ViewBag.Section = section;
        }

        return View();
    }  

视图

<div id="dashboard-container">
@if (ViewBag.Section != null)
{
    switch ((string)ViewBag.Section)
    {
        case "sn-quickview":
            @Html.Partial("_MyQuickView")
            break;
        case "sn-docsfiles":
            break;
        case "sn-needswork":
            @Html.Action("GetNeedsWork", new { clientId = ViewBag.CompanyId})

            break;
        case "sn-advisorynotes":
            @Html.Action("GetAdvisoryNotes", new { companyId = ViewBag.CompanyId })
            break;
        case "sn-documentedrisks":
            break;
        case "sn-expirations":
            @Html.Action("GetDevicesByExpiration", new { clientId = ViewBag.CompanyId})
            break;
        case "sn-lastupdated":
            break;
        case "sn-blankfields":
            break;
    }
}
else
{
    @Html.Partial("_MyQuickView")
}

使用这个小方案,我可以直接链接到索引视图,并在最初加载所需的局部视图。我得到的问题是使用后退按钮。所有后退按钮都会更改地址栏中的URL以反映上一个局部视图,但实际上并未显示上一个局部视图。

例如 localhost:xxx / Index?section = sn-docsfiles
此网址显示在浏览器中,但之前呈现的部分视图未显示。我正在使用window.history.pushState将参数化的url推送到历史记录,以便在呈现这些部分视图时后退按钮可以工作,但它似乎需要json类型的data参数。

我可以看到这对于使用web api和可能有角度而不是简单的旧mvc和ajax partials来说会非常简单。

我的问题是:
有哪些技术可以保留这些先前渲染的部分,以便在单击后退按钮时它们正确显示?

1 个答案:

答案 0 :(得分:1)

你有MVC路线的力量来返回不同的视图,你似乎很奇怪,你选择这样做。

道歉,如果我还没有理解你的问题,但似乎你想要实现的目标已经是MVC框架的一部分了。您有一个主视图,并且您正在尝试在其中注入子视图/部分视图。

如果您正在尝试这样做,请查看@RenderBody()和MVC布局。

关于布局的好文章 - http://www.dotnetcurry.com/ShowArticle.aspx?ID=636