ASP.NET MVC 部分视图 + Ajax 加载



我正在处理一个项目,为了不让每次页面更改都重新加载布局视图,我决定将视图更改为部分视图。为了在用户单击导航菜单中的菜单项之一时加载视图,我现在使用 jquery ajax,如下所示:

$("ul.metismenu a:not(.subMenuParent)").unbind().click(function (e) {
    e.preventDefault();
    var url = $(this).attr("href");
    window.history.pushState("", "", url);
    $.ajax({
        url: url,
        dataType: 'html',
        success: function (data) {
            $('#page-content').html(data);
        }
    });
});

元素页面内容驻留在布局视图中。它工作正常,但是我现在遇到的问题是,当我尝试直接访问视图时,我直接在浏览器中访问/Dashboard,我将只获得部分视图,而没有布局页面。有人有一些想法,请问我该如何解决这个问题?提前感谢您的任何建议。

您可以使用变量从不同的控制器操作设置不同的布局。即使是ViewBag也足够了。对于操作仪表板,您可以将 ViewBag.Layout (例如)设置为 Layout html,对于部分视图,您可以将 ViewBag.Layout 设置为空。在 html 页面中使用此变量。因此,将根据我们调用的操作选择正确的布局。

您的URL调用MVC Action,返回ActionResultPartialView()<</p>

div class="one_answers">

我能够通过首先检查收到的请求是否是 ajax 请求来解决这个问题。然后根据请求的类型,我设置布局视图。这是一个操作的示例代码:-

    public ActionResult Index()
    {
        if (!Request.IsAjaxRequest())
        {
            ViewBag.Layout = "~/Views/Shared/_Layout.cshtml";
        }
        return PartialView();
    }

在部分视图中,我设置了以下内容:-

  @{ 
      Layout = ViewBag.Layout; 
   }

希望这对可能遇到相同问题的人有所帮助。

最新更新