ExtAspNet应用技巧(十三) - 后台主页面(IFrame框架)


书接上回,在系统登录之后,就要显示主页面了,先看下效果:

界面效果



点击“退出系统”按钮:






整个页面被分为了三部分,上面的是页面标题和工具栏;左侧的是系统菜单;右侧的主内容区域。

需要特别注意的是,在主内容区域我们使用了IFrame,这也是ExtAspNet提倡的一种做法。
这种IFrame框架不仅加快了页面的加载速度,而且代码逻辑以页面的形式组织划分,对于代码编写调试以及多人开发都极其有利。


ASPX标签


    <ext:PageManager ID="PageManager1" AutoSizePanelID="BorderLayout1" HideScrollbar="true"
        runat="server" />
    <ext:BorderLayout ID="BorderLayout1" ShowBorder="false" runat="server">
        <Regions>
            <ext:Region ID="regionTop" Height="60px" ShowBorder="false" ShowHeader="false" Position="Top"
                Layout="Fit" runat="server">
            </ext:Region>
            <ext:Region ID="regionLeft" Split="true" Width="200px" Margins="0 0 0 0" ShowHeader="true"
                Title="菜单" EnableCollapse="true" Layout="Fit" Position="Left" runat="server">
            </ext:Region>
            <ext:Region ID="regionCenter" ShowHeader="false" EnableIFrame="true" IFrameUrl="~/admin/default.aspx"
                IFrameName="main" Margins="0 0 0 0" Position="Center" runat="server">
            </ext:Region>
        </Regions>
    </ext:BorderLayout>
    

在这段ASPX标签中,还是有一些ExtAspNet的技巧的:
  • PageManager的AutoSizePanelID用来指定自动全屏的容器
  • BorderLayout的ShowBorder="false"用来去除此容器的外边框(1px的蓝色边框)
  • regionTop通过Position="Top"设置显示在页面的上部(同理regionLeft显示在左侧,regionCenter显示在中间)
  • regionTop和regionLeft容器通过Layout="Fit"来标示只有一个子控件,并且这个子控件充满父容器
  • regionCenter通过EnableIFrame,IFrameUrl,IFrameName三个属性来指定其内部是一个Iframe


下面我们来仔细看下regionTop的声明:
    <ext:Region ID="regionTop" Height="60px" ShowBorder="false" ShowHeader="false" Position="Top"
        Layout="Fit" runat="server">
        <Toolbars>
            <ext:Toolbar ID="Toolbar1" Position="Bottom" runat="server">
                <Items>
                    <ext:ToolbarFill ID="ToolbarFill1" runat="server">
                    </ext:ToolbarFill>
                    <ext:ToolbarText ID="tbtWelcome" runat="server">
                    </ext:ToolbarText>
                    <ext:ToolbarSeparator ID="ToolbarSeparator3" runat="server">
                    </ext:ToolbarSeparator>
                    <ext:Button ID="Button1" runat="server" Text="首页" EnablePostBack="false" OnClientClick="window.open('./admin/default.aspx', 'main');">
                    </ext:Button>
                    <ext:ToolbarSeparator ID="ToolbarSeparator1" runat="server">
                    </ext:ToolbarSeparator>
                    <ext:Button ID="btnSysConfig" runat="server" Text="系统设置" EnablePostBack="false" OnClientClick="window.open('./admin/config.aspx', 'main');">
                    </ext:Button>
                    <ext:ToolbarSeparator ID="ToolbarSeparator2" runat="server">
                    </ext:ToolbarSeparator>
                    <ext:Button ID="btnExit" runat="server" Text="退出系统" ConfirmText="确定退出系统?" OnClick="btnExit_Click">
                    </ext:Button>
                </Items>
            </ext:Toolbar>
        </Toolbars>
        <Items>
            <ext:ContentPanel ShowBorder="false" ShowHeader="false" BodyStyle="background-color:#1C3E7E;"
                ID="ContentPanel1" runat="server">
                <div style="font-size: 20px; color:White; font-weight:bold; padding: 5px 10px; ">
                    <a href="./main.aspx" style="color:White;">AppBox</a>
                </div>
            </ext:ContentPanel>
        </Items>
    </ext:Region>
    


可以看到regionTop有一个Position="Bottom"的工具栏(我们会在这个工具栏放置一些常用的按钮),和仅有的一个子控件ContentPanel1。
此子控件会填充整个regionTop区域而不必设置宽度和高度,这得益于regionTop的Layout="Fit"属性(你也可以试着把这个属性去掉看会发生什么)。

regionLeft控件留空是因为我们以后会通过动态的方式为其添加树形的菜单。

注:ContentPanel是ExtAspNet中唯一一个可以放置非ExtAspNet控件(比如html标签,asp.net控件)的控件。



两个需要关注的地方

1. 点击按钮在Iframe中打开页面,这是很多人经常遇到的问题
    <ext:Button ID="Button1" runat="server" Text="首页" EnablePostBack="false" OnClientClick="window.open('./admin/default.aspx', 'main');">
    </ext:Button>
    

首先设置EnablePostBack="false"来禁用点击按钮回发的行为,然后注册点击按钮的客户端脚本OnClientClick,通过JavaScript函数window.open来指定在名称为name的IFrame中打开新页面。
而这个IFrame正是regionCenter所定义的(IFrameName="main"),所以点击此按钮新页面会在主内容区域打开。

2. 点击按钮弹出确认对话框,这个实现是如此的简单以至于只需要配置一下Button的属性

    <ext:Button ID="btnExit" runat="server" Text="退出系统" ConfirmText="确定退出系统?" OnClick="btnExit_Click">
    </ext:Button>
    



后台代码

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            LoadData();
        }
    } 
    private void LoadData()
    {
        tbtWelcome.Text = String.Format("欢迎您,<span style=\"font-weight:bold;\">{0}</span>", User.Identity.Name);
    }
    
    protected void btnExit_Click(object sender, EventArgs e)
    {
        FormsAuthentication.SignOut();
        FormsAuthentication.RedirectToLoginPage();
    }
    

如果你想运行本章中使用的代码,可以从 http://appbox.codeplex.com/SourceControl/ListDownloadableCommits.aspx 下载全部源代码。



posted @ 2009-09-08 22:27 三生石上 阅读(6361) 评论(23) 编辑 收藏

 回复 引用 查看   
#1楼2009-09-08 23:07 | CoolCode      
关注一下。
 回复 引用 查看   
#2楼2009-09-08 23:16 | freetofly      
您好,一直在关注您的博客

想在一些东西里边试用一下extaspnet

能留个您的联系方式么?有些问题想请教下

我的email:

kangtadu@zeld.cn


 回复 引用 查看   
#3楼2009-09-09 08:38 | ansonpan      
我劝楼上的先别把这东西引到项目中!
我最近也在测试这套控件,发现很多问题,也不是特别稳定。
而且版本更新,变化太大!
还是等有了一个比较稳定的版本出来再引到项目中吧,不然后果自负了!
呵呵,

 回复 引用 查看   
#4楼[楼主]2009-09-09 08:48 | sanshi      
@freetofly
有问题直接发到这个邮箱:sanshi.ustc@gmail.com

 回复 引用 查看   
#5楼2009-09-09 09:25 | ansonpan      
折叠左边的菜单,右边的内容可以自动申开,
但是在展开左边的菜单,右边页面的内容则不能自动缩了!这样最右边的内容就会看不见,而且又没有滚动条!
拖拽中间那条分割线也是一样!

 回复 引用 查看   
#6楼2009-09-09 09:26 | nfyz      
很不错的,,就是应用不熟,,还有不能可视化排版,比较头疼。
 回复 引用 查看   
#7楼[楼主]2009-09-09 10:03 | sanshi      
引用ansonpan:
折叠左边的菜单,右边的内容可以自动申开,
但是在展开左边的菜单,右边页面的内容则不能自动缩了!这样最右边的内容就会看不见,而且又没有滚动条!
拖拽中间那条分割线也是一样!

首先说下你的测试环境吧,我在Firefox3.5和IE8.0下没发现这个问题。

 回复 引用 查看   
#8楼2009-09-09 10:08 | 上山打老虎      
刚开始做肯定会有问题的,慢慢完善吧。
支持你!加油!

 回复 引用 查看   
#9楼2009-09-09 10:30 | ansonpan      
我用的是IE6.

 回复 引用 查看   
#10楼[楼主]2009-09-09 10:32 | sanshi      
引用ansonpan:我用的是IE6.

ExtAspNet不支持IE6.......

 回复 引用 查看   
#11楼2009-09-09 10:39 | ansonpan      
难怪我做的测试项目,有这么多问题!
 回复 引用 查看   
#12楼2009-09-09 10:41 | rainnoless      
楼主应该在项目中写个readme,告诉使用者,支持那些浏览器,呵呵。
 回复 引用 查看   
#13楼[楼主]2009-09-09 10:43 | sanshi      
引用rainnoless:楼主应该在项目中写个readme,告诉使用者,支持那些浏览器,呵呵。

yes!

 回复 引用   
#14楼2009-09-09 11:23 | yasen2002[未注册用户]
用IFrame的话,就是加载一张新的页面,那对ext要重新加载一次了吧??我感觉是对性能有降低吧!而且,在这个页面生成的extform能全屏拖动吗??
 回复 引用 查看   
#15楼[楼主]2009-09-09 11:28 | sanshi      
引用yasen2002:用IFrame的话,就是加载一张新的页面,那对ext要重新加载一次了吧??我感觉是对性能有降低吧!而且,在这个页面生成的extform能全屏拖动吗??

因为有客户端缓存,所以对性能没啥影响,反而会由于将逻辑拆分到两个页面,而简化了代码的开发和减少PostBack时响应时间。

“extform能全屏拖动”,你指的是在窗口变化时自适应大小吧,这个当然是可以的哦。

 回复 引用   
#16楼2009-09-09 12:22 | yasen2002[未注册用户]
引用sanshi:
引用yasen2002:用IFrame的话,就是加载一张新的页面,那对ext要重新加载一次了吧??我感觉是对性能有降低吧!而且,在这个页面生成的extform能全屏拖动吗??

因为有客户端缓存,所以对性能没啥影响,反而会由于将逻辑拆分到两个页面,而简化了代码的开发和减少PostBack时响应时间。

“extform能全屏拖动”,你指的是在窗口变化时自适应大小吧,这个当然是可以的哦。



我说的加载不是下载,是指js是解释性语言。
extform指的是,IFROM里面页面生成的弹出FORM,他好象不能脱离IFROM的边框。。。

 回复 引用 查看   
#17楼[楼主]2009-09-09 12:42 | sanshi      
引用yasen2002:
引用sanshi:
引用yasen2002:用IFrame的话,就是加载一张新的页面,那对ext要重新加载一次了吧??我感觉是对性能有降低吧!而且,在这个页面生成的extform能全屏拖动吗??

因为有客户端缓存,所以对性能没啥影响,反而会由于将逻辑拆分到两个页面,而简化了代码的开发和减少PostBack时响应时间。

“extform能全屏拖动”,你指的是在窗口变化时自适应大小吧,这个当然是可以的哦。



我说的加载不是下载,是指js是解释性语言。
extform指的是,IFROM里面页面生成的弹出FORM,他好象不能脱离IFROM的边框。。。


正如你所想的,ExtAspNet中IFrame中页面弹出的窗口是可以脱离IFrame的边框的,只需要指定ext:Window的Target="_parent" 就行了,呵呵

 回复 引用   
#18楼2009-09-09 13:15 | yasen2002[未注册用户]
@sanshi
多谢指导

 回复 引用 查看   
#19楼2009-09-09 14:22 | ansonpan      
ext:TextBox
只能是放在ext:Form表单中,才能显示处Label
如果 <ext:ContentPanel runat="server" >
<Items>
<ext:TextBox ID="txt1" Label="显示标签" Width="250" runat="server" Required="True" ShowRedStar="true">
</ext:TextBox></Items>
</ext:ContentPanel>
如果我放在中,不能显示Label,设了ShowLabel=true 也不行。
还有TextBox 的Label能不能设置,左中右对齐.

另外,放在表单中的下拉框,绑定数据库的数据时。
点下拉,显示不全,只能显示大概几十像素左右。
<ext:FormRow>
<Items> <ext:DropDownList ID="drptest" runat="server" Width="250" Label="下拉测试" Required="true" ShowRedStar="true">
</ext:DropDownList>
</Items>
</ext:FormRow>

 回复 引用 查看   
#20楼[楼主]2009-09-09 14:30 | sanshi      
@ansonpan
正如你说的,ext:TextBox等表单控件必须放在SimpleForm或者Form中才能显示Label。

正好有别人问怎么右对齐:http://www.cnblogs.com/sanshi/archive/2009/09/04/1560567.html#1639603

至于你说的DropDownList显示不全的情况,我没遇到,你可以再测试下

 回复 引用 查看   
#21楼2009-09-14 11:27 | Mr.King      
建议博主参考下coolite..可视化比较强.
 回复 引用 查看   
#22楼[楼主]2009-09-14 11:29 | sanshi      
引用Mr.King:建议博主参考下coolite..可视化比较强.

ExtAspNet的在VS的设计视图中还有BUG,这个会在近期版本增强

 回复 引用 查看   
#23楼2010-08-19 13:17 | finesite      
Unknown server tag 'ext:BorderLayout' 用这个页面的例子,出现上述错误,请教
发表评论

昵称: [登录] [注册]

主页:

邮箱:(仅博主可见)

评论内容:

  登录  注册

[使用Ctrl+Enter键快速提交评论]

0 1562860 GmTs5gi4nWc=