如何防止带有区域的整页刷新

时间:2015-10-30 19:51:04

标签: asp.net-mvc asp.net-mvc-areas

我们在该主题的描述开始时启动了模块化MVC项目。

MVC Ninject: How to add NinJect bindings from an MVC Area project

我们尚未找到一个好的解决方案,就是在从不同区域加载视图时阻止整页刷新。

简史,我们为所有领域使用不​​同的网络项目。在构建项目时,我们将所有文件复制到主Web应用程序项目中的Area文件夹中。

主Web应用程序项目应用程序的标题部分包含一个允许用户打开任何插件的菜单。

现在,当用户点击菜单项时,菜单以及所有内容都会刷新。

我们一直在尝试插件项目中的部分视图,但仍然会刷新页面并且大部分时间都会丢失导致页面布局问题的CSS。

至少我们在主网站上使用的_Layout模板,我们需要找到一种在从任何区域加载视图时不刷新的方法。

非常感谢任何想法。

由于

1 个答案:

答案 0 :(得分:0)

这是一个关闭和关闭的事情,但最后我们找到了一些看起来很有希望的东西,而不必诉诸于将大量代码更改为javascript框架。我们使用jQuery进行UI操作,但尝试保留我们为了生产力和质量考虑而记下的内容。

现在我们正在使用内置ajax助手的MVC,因此这种能力实际上是Asp.Net MVC的原生。

基本上,包含@RenderBody的div,我们给了一个ID。

然后我们定义AjaxOptions来替换这个div中的html。然后我们使用Ajax.ActionLink。

到目前为止,它的美妙之处在于我们定义了ajaxStart&完整的功能,可以在一个地方加载时处理加载div。

<script>
        $(document).ajaxStart(function () {
            $("#loading_div").show();
        });

        $(document).ajaxError(function (result) {
            $("#loading_div").hide();
            alert('Exception: ' + result);
        });

        $(document).ajaxComplete(function () {
            $("#loading_div").hide();
        });
</script>

然后在我们所有的插件应用程序中,所有控制器都返回部分视图。我注意到的一件事是,在我们的插件项目中,在_ViewStart模板中,对布局进行注释非常重要。

如果不是,我们发现您点击链接的次数越多,您的控制器操作就越多地运行重复循环。

在布局中加载jquery-Unobtrusive-ajax脚本是必不可少的。我们是这样做的。

我们有一个包含41个项目的解决方案,其中7个是插件项目。到目前为止,观看dom和网络流量,初始测试中的所有内容都运行良好。