求教给位一个问题,就是mvc布局的问题:我设计的网站页面如所示:
我是用的第一种方式:我知道mvc可以使用_LayoutPage布局来把页面来减少代码的重复情况,如果页面中菜单和信息栏,但是有个问题是当控制器里面的视图视同了布局页的时候会从新加载页面,这样会有个问题,我菜单点击到不同页面的时候会样式,这样重新加载一次样式效果就不能实现了,信息栏的数据也只需要加载一次就好了,不想点击到不同内容页面的时候,再求助一次这样感觉服务器增加了访问压力;
第二种方式使用的是 $("div").load('页面主要内容');我把所有的js和css都写在home index视图中,然后点击菜单异步记在页面这样就只会请求更新返回需要改变的内容页了,我这里的另外页面是一个新的控制器news的index视图页面里面没有任何样式的,但是这样我又遇到一个问题就是,我的内容也有个目录信息,是后台通过分页传到前台的每次去访问下一页的时候都是传pageindex页码到后台的 这样的访问地址就变成了news/index?pageinde=2来访问服务端来获取数据了,返回的到浏览的地址就变成news/index?pageinde=2虽然数据过来了但是没用样式,然后我想只能在分页之后获取到news/index?pageinde=2这个地址 然后location.href改变浏览器地址为home/index,然后在通过异步$("div").load(' news/index?pageinde=2');来更新主体内容,我就点击下一页会向服务器发3次请求 这样也不好
求教有没有什么方法来解决这个问题,或者有没有方法来修改部分视图内容,我想要是有方法点击布局页的菜单能只修改布局页的内容这样可以,求教各位大神
说了这么多,描述的乱七八糟的,layout就是类似asp.net的母版页,你描述那么多,没能仔细看完,但大概,就是,要么,Ajax,要么整页面加载,没什么其他技术,整页加载你嫌请求多?纯粹是瞎操心,你需要的是用缓存,把一些经常用的东西缓存起来,比如你的菜单的数据,这样多请求几次也不用瞎操心了。
高级用法,还需要学学
@坚持的孤独: 你说什么是“高级用法”?
@顾晓北: 缓存呀,没用过
@坚持的孤独: 缓存一点都不高级啊,System.Runtime.Caching去看下就会了。我觉得要是并发不是很高 加载个菜单还能搞垮你的系统嘛。
@坚持的孤独: 随便搜一搜就知道了,你这没看出需要“比较高级”的缓存。。。
@笋干: 恩 知道了 谢谢了
@顾晓北: 恩 那我看看吧 谢了
1.使用布局页,每次点击刷新整个页面,重新加载仅用于本页面的js,css
2.单页面程序,第一次载入时,加载所有js,css,每次点击由ajax载入页面内容(仅含当前页面私有CSS和JS,不包含公共样式与js)
单页面程序的时候,你必须拦截你的超链接跳转行为,转由ajax请求,而不是跳到href指定的页面。
有点提示,谢谢
你没有理解到服务器渲染页面和客户端js渲染页面的区别。服务器端本来就做不到部分加载。部分加载一直是js干的活。别搞混了。像你这样的情况,不要用mvc的Layout了,采用前端单页面的方式来做吧。找个顺手的前端框架就解决了。最简单的就是ajax html 自己替换content部分了。
我第二个方法就是ajax html 自己替换的,但是在分页的时候就有问题了,是返回另外一个没有样式的内容
@坚持的孤独: ajax html 这就要求你事先都加载好了css,或者你整复杂点,前端模块化自动加载css咯。参见seajs,requiredjs之类。
我建议你全站css都打包加载好了,我估摸你也不是很大的系统吧。
首先你可以有个框架页面,访问框架页面里面 可以使用Html.Action()方法来加载分布视图,分别放在你3个位置,注意是3个部分的页面layout=null,之后你就就自己写ajax 点击右边刷新内容的DIV 即可 ,内容分页同AJAX 刷新内容部分即可!
有这个的用法嘛 求demo看看
@坚持的孤独: 试试就知道了,没demo ,会AJAX ,你问的都不是事请!