最近才开始学mvc,好多问题。。。
在做一个后台管理的小系统练习,页面分成3部分(头,左侧导航,右侧显示内容),
WebFrom使用惯framset来布局三部分。
知道mvc里面有Render可以加载局部,用Render来加载头和左导航,这样会不会点击导航链接打开内容每次都要重新再加载头和左导航一次?
还是说使用framset方便一点?弄个target,头和左侧导航加载一次就可以了。
但是用framset,打开页面空白的。。单独打开头或左侧都有内容啊,这是为啥呢?
<framset border="0" frameSpacing="0" rows="60, *" frameBorder="0">
<frame name="header" src="Header/Index" frameBorder="0" noResize scrolling="no" />
<framset cols="170, *">
<frame name="menu" src="Menu/Index" frameBorder="0" noResize>
<frame name="main" src="Main/Index" frameBorder="0" noResize scrolling="yes">
</framset>
</framset>
请高手指点迷津啊。
相对WebForm来说,MVC项目中,对html的使用更加自由,具体使用什么可以自己考量,至于提到的空白,没看出说的是什么情况,建议在顶、左、主体部分对应的action那里加断点调试调试,看看执行情况。
设了断点,调试的时候竟然没有进去,<frame name="header" src="Header/Index" 难道这样写错了吗?没有加载到页面的?
@xiao黎: src属性的值你是硬编码写上去的还是通过HtmlHelper生成的?
显示空白比较奇怪,如果是服务器错误应该会显示这个错误提示,如果是url找不到文件也应该是提示404,还是先检查一下url地址吧
@北在北方: 我是硬编码以“Controller/Action”的格式写上去的,整个页面打开是空白的,然后我查看源代码,点击里面顶部那个链接src="Header/Index"进去的话可以单独打开顶部的页面噢,左和右点击进去也是可以噢,路径应该没错。
@xiao黎: 你在访问这个有frame的网页的时候,地址栏用的是什么地址?(对于访问action的地址建议使用Url.Action方法来生成url地址而不是硬编码,这样,当路由格式变化的时候,生成的url地址也是新的不用像硬编码那样重新写,这话可能跟你的问题没关系,只是建议。)
@北在北方: 嗯谢谢你的建议,按着你的建议修改了,还是空白的奇怪了。
访问frame页面地址是:http://localhost:17617/Admin/Home
Admin是我建了一个区域,Home是Controller,Index是Action。
<framset border="0" frameSpacing="0" rows="60, *" frameBorder="0">
<frame name="header" src="@Url.Action("Index","Header")" frameBorder="0" noResize scrolling="no" />
<framset cols="170, *">
<frame name="menu" src="@Url.Action("Index","Menu")" frameBorder="0" noResize>
<frame name="main" src="@Url.Action("Index","Main")" frameBorder="0" noResize scrolling="yes">
</framset>
</framset>
打开页面后用浏览器查看源代码是这样的:
<framset border="0" frameSpacing="0" rows="60, *" frameBorder="0">
<frame name="header" src="/Admin/Header" frameBorder="0" noResize scrolling="no" />
<framset cols="170, *">
<frame name="menu" src="/Admin/Menu" frameBorder="0" noResize>
<frame name="main" src="/Admin/Main" frameBorder="0" noResize scrolling="yes">
</framset>
</framset>
点击浏览器源代码里面的链接进去都是可以打开的喔。
我搞不清哪里错了。
@xiao黎:
首先我查到的是frameset不能与body一起使用,所以你这个frameset的页面先看看有没有body,不然frame不起作用;
其次:framset => frameset
@北在北方: 非常感谢。
你要学MVC的话,先忘掉以前的啥Frameset吧。
至于你问重新打开的事,我建议这个你也可以不用考虑,等你学会了再考虑这事比较好。
您的意思是每个页面都先用Render来加载局部页面,不用Frameset和先不考虑多次加载同样内容的情况吗?
@xiao黎: 现在如果考虑页面刷新的问题,基本上的终解解决方案是AJAX,而非FRAMESET,
那会显得很奇怪。
对于你在学习一门新技术的过程中,尽量避免过早加入复杂度考虑。
@爱编程的大叔: 谢谢。