【问题标题】:ASP.NET MVC Partial Views + Ajax LoadASP.NET MVC 部分视图 + Ajax 加载
【发布时间】:2017-06-14 17:37:14
【问题描述】:

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

        }
    });
});

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

【问题讨论】:

  • 只需在您的局部视图中添加@{ Layout = "~/Views/Shared/_Layout.cshtml" }
  • @mmushtaq 我已经尝试过了,但是布局被渲染了两次
  • 你能分享控制器操作如何返回部分视图吗?

标签: jquery ajax asp.net-mvc asp.net-mvc-4 asp.net-mvc-5


【解决方案1】:

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

【讨论】:

  • 谢谢你给我指出了正确的方向。我发布了我提出的修复程序并将您的反馈标记为答案,因为感谢您我提出了这个想法。
  • 很高兴有帮助!
【解决方案2】:

你的网址调用MVC Action,让你的回报ActionResultPartialView()

【讨论】:

  • 我的操作返回一个 ActionResult 并且它已经返回 PartialView()
  • 尝试添加@{ Layout = string.Empty; }
  • 或者原来jquery.unobtrusive-ajax.js默认不包括在内。添加它可以解决问题。
【解决方案3】:

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

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

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

  @{ 
      Layout = ViewBag.Layout; 
   }

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-31
    • 2017-06-16
    • 1970-01-01
    • 1970-01-01
    • 2013-01-18
    • 1970-01-01
    相关资源
    最近更新 更多