Jquery ASP.NET MVC局部视图+;Ajax加载

Jquery ASP.NET MVC局部视图+;Ajax加载,jquery,ajax,asp.net-mvc,asp.net-mvc-4,asp.net-mvc-5,Jquery,Ajax,Asp.net Mvc,Asp.net Mvc 4,Asp.net Mvc 5,我正在处理一个项目,为了避免每次页面更改都会重新加载布局视图,我决定将视图更改为部分视图。为了在用户单击导航菜单中的一个菜单项时加载视图,我现在使用jquery ajax,如下所示:- $("ul.metismenu a:not(.subMenuParent)").unbind().click(function (e) { e.preventDefault(); var url = $(this).attr("href"); window.history.pushSt

我正在处理一个项目,为了避免每次页面更改都会重新加载布局视图,我决定将视图更改为部分视图。为了在用户单击导航菜单中的一个菜单项时加载视图,我现在使用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);

        }
    });
});
  @{ 
      Layout = ViewBag.Layout; 
   }

元素页面内容位于布局视图中。它工作正常,但是我现在遇到的问题是,当我尝试直接访问视图时,比如说直接在浏览器中访问我的go/Dashboard,我只会得到部分视图,而没有布局页面。有人知道我怎么解决这个问题吗?提前感谢您的建议。

您的url调用
MVC操作
,返回
操作结果
PartialView()
您可以使用变量从不同的控制器操作设置不同的布局。即使是一个可视包也足够了。对于操作面板,可以将ViewBag.Layout(比如)设置为布局html,对于部分视图,可以将ViewBag.Layout设置为空。然后在html页面中使用此变量。因此,根据我们调用的操作,将选择正确的布局。

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

    public ActionResult Index()
    {
        if (!Request.IsAjaxRequest())
        {
            ViewBag.Layout = "~/Views/Shared/_Layout.cshtml";
        }
        return PartialView();
    }
在局部视图中,我设置了以下内容:-

$("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);

        }
    });
});
  @{ 
      Layout = ViewBag.Layout; 
   }

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

只需添加
@{Layout=“~/Views/Shared/\u Layout.cshtml”}
在您的部分视图中。@mmushtaq我已经尝试过了,但是布局被渲染了两次,那么您可以分享返回部分视图的控制器操作的方式吗?我的操作返回一个操作结果,它已经返回部分视图()尝试添加
@{Layout=string.Empty;}
或者结果是默认情况下不包括
jquery.unobtrusive ajax.js
。添加它可以解决问题。谢谢你为我指明了正确的方向。我发布了我提出的修复方案,并将您的反馈标记为答案,因为多亏了您,我才提出了这个想法。很高兴这有帮助!!