这篇文章我们会从头开始使用ExtAspNet,最终完成一个模拟用户登录的界面,最终的效果图如下所示:

项目准备

1. 新建一个ASP.NET Web应用程序项目。

2. 从开源网站下载最新版本的ExtAspNet,并在新建项目中添加对ExtAspNet.dll的引用。

新建一个ASPX页面

1. 在<html>标签上面添加声明

<%@RegisterAssembly="ExtAspNet"Namespace="ExtAspNet"TagPrefix="ext"%>
 
2. 在<form>标签中添加PageManager控件
<ext:PageManager ID="PageManager1" runat="server" />

每个使用ExtAspNet控件的页面都必须包含一个PageManager控件,此控件用来控制页面级别的全局参数。比如控制页面样式、语言、表单参数、AJAX参数以及布局的参数,后面会有一篇文章专门介绍这个控件。

3. 设计登陆表单

由于我们想让登录表单居中显示,所以在表单外部嵌套了一个Window控件,并让Window控件居中(其实是左右居中,上下位于黄金分割点的位置)显示。

<ext:Window ID="Window1" runat="server" Title="登录表单" IsModal="false" EnableClose="false" WindowPosition="GoldenSection" Width="350px">
</ext:Window>

这个所谓的黄金分割点是通过 WindowPosition="GoldenSection" 设置的,这也是ExtAspNet的一个创新点(据说人眼在查看网页时,视线偏上一点大致位于黄金分割点的位置,而不是正中心)。

实现这一功能的代码在/ExtAspNet/js/X/X.wnd.js中的_calculateGoldenPosition函数:

1:function _calculateGoldenPosition(bodySize, windowSize) {
2:        var top = (bodySize.height - (bodySize.height / 1.618)) - windowSize.height / 2;
3:        if (top < 5) {
4:            top = 5;
5:        }
6:        var left = (bodySize.width - windowSize.width) / 2;
7:        if (left < 0) {
8:            left = 5;
9:        }
10:        return { left: left, top: top };
11:};
 
 

4. 在Window中添加SimpleForm控件

最终的ASPX中的Window标签如下所示:

1:<ext:Window ID="Window1" runat="server" Title="登录表单" IsModal="false" EnableClose="false"
2:    WindowPosition="GoldenSection" Width="350px">
3:    <Items>
4:        <ext:SimpleForm ID="SimpleForm1" runat="server" ShowBorder="false" BodyPadding="10px"
5:            LabelWidth="60px" EnableBackgroundColor="true" ShowHeader="false">
6:            <Items>
7:                <ext:TextBox ID="tbxUserName" Label="用户名" Required="true" runat="server">
8:                </ext:TextBox>
9:                <ext:TextBox ID="tbxPassword" Label="密码" TextMode="Password" Required="true" runat="server">
10:                </ext:TextBox>
11:                <ext:Button ID="btnLogin" Text="登录" Type="Submit" ValidateForms="SimpleForm1" ValidateTarget="Top"
12:                    runat="server" OnClick="btnLogin_Click">
13:                </ext:Button>
14:            </Items>
15:        </ext:SimpleForm>
16:    </Items>
17:</ext:Window>

这个示例涉及PageManager、Window、SimpleForm、TextBox、Button几个控件,很多属性都是不言自明的,后面我们也会详细介绍。

后台代码

1:protected void btnLogin_Click(object sender, EventArgs e)
2:{
3:    if (tbxUserName.Text == "admin" && tbxPassword.Text == "admin")
4:    {
5:        Alert.ShowInTop("成功登录!");
6:    }
7:    else
8:    {
9:        Alert.ShowInTop("用户名或密码错误!", MessageBoxIcon.Error);
10:    }
11:}

这里的逻辑很简单,如果用户名和密码正确,就弹出对话框显示“成功登录!”,否则显示错误信息。

小结

整个示例虽然看似简单,却实现了很多普通ASP.NET无法实现或难以完成的任务:

1. 不用一行JavaScript代码完成表单的居中显示

2. 一个可拖动的窗体

3. 用户名和密码输入框的客户端验证

4. 表单回发不是整个页面的回发,而是AJAX(这也是ExtAspNet所特有的原生AJAX,无需任何配置和特殊的代码就默认拥有AJAX特性)

5. 漂亮的提示框是通过C#代码生成的(并且可以在当前页面框架或者父页面框架中显示,这也是ExtAspNet所特有的基于IFrame的框架)

FineUI秘密花园(二) — 一切从头开始相关推荐

  1. [原创]FineUI秘密花园(二十七) — 窗体控件概述(上)

    窗体控件在项目中使用非常频繁,同时窗体控件和启用IFrame的面板控件也一起构成了FineUI所特有的内联框架,从而使弹出窗体不再局限于IFrame页面中.本章我们会详细介绍窗体控件的基本用法. 创建 ...

  2. [原创]FineUI秘密花园(二十一) — 表格之动态创建列

    有时我们需要根据数据来动态创建表格列,怎么来做到这一点呢?本章会详细讲解. 动态创建的列 还是通过一个示例来看下如何在FineUI中动态创建表格列,示例的界面截图: 先来看下ASPX的标签定义: 1: ...

  3. [原创]FineUI秘密花园(二十六) — 选项卡控件概述

    选项卡的使用非常广泛,比如官方示例的站点框架,TabStrip被用来同时打开多个页面,并方便地在页面之间进行快速切换.TabStrip还进行需要和JavaScript进行交互,比如动态的打开关闭选项卡 ...

  4. [原创]FineUI秘密花园(二十四) — 树控件之数据绑定

    上一篇文章我们介绍了树控件的基本用法,不过都是通过标签来声明树控件的结构,本章我们会详细讲解如何在后台绑定树控件. 绑定到XmlDocument 下面通过一个简单的例子来看如何将XmlDocument ...

  5. 《FineUI秘密花园》在线阅读与完整PDF版

    原文地址为: <FineUI秘密花园>在线阅读与完整PDF版 在线阅读 FineUI秘密花园(一) - 为什么选择FineUI? FineUI秘密花园(二) - 一切从头开始 FineUI ...

  6. [原创]FineUI秘密花园(六) — 表单控件

    FineUI中有哪些常用的表单控件,它们有什么共同点和不同点,这一篇文章我们会详细解说. 表单控件的公共属性 所有的表单都具有如下属性: ShowLabel:是否显示标签(默认值:true). Sho ...

  7. [原创]FineUI秘密花园(一) — 为什么选择FineUI?

    首先来看看FineUI是什么? FineUI 是一组基于 ExtJS 的专业 ASP.NET 控件库,拥有原生的 AJAX 支持和华丽的 UI 效果. FineUI 的使命是创建没有 JavaScri ...

  8. FineUI秘密花园(六) — 表单控件

    FineUI中有哪些常用的表单控件,它们有什么共同点和不同点,这一篇文章我们会详细解说. 表单控件的公共属性 所有的表单都具有如下属性: ShowLabel:是否显示标签(默认值:true). Sho ...

  9. FineUI秘密花园(七) — 上传控件

    FineUI直到V3.0才内置了自己的上传控件,为什么唯独上传控件姗姗来迟,这其中的缘由是啥?之前又是如何实现上传功能的呢?下面听我慢慢道来. AJAX请求与文件上传请求的对比 普通的AJAX请求的请 ...

最新文章

  1. 两种ICP的改进算法:PLICP与NICP
  2. 私有属性可以被继承吗_妻子可以代位继承吗?
  3. 如何在文件夹中运行cmd命令行
  4. ARP探测目标工具arping常用命令集合大学霸IT达人
  5. Linq中两种更新操作
  6. php 判断两个数组差集,php array_udiff_assoc 计算两个数组的差集实例
  7. Android 帧动画,加载动画,AnimationDrawable,仿京东加载动画
  8. android驱动测试,Android: 通过 cucumber 驱动 monkey 做稳定性测试
  9. 解决AutoCAD2010安装完毕后闪退问题
  10. JNI调用两层C++动态库
  11. 二叉排序树[2005年华中科技大学计算机保研机试真题]
  12. jenkins插件之Publish Over SSH
  13. 浏览器的语音识别功能
  14. SqlSession的使用范围
  15. 【观察】“专精特新”数智化国产替代,为何首选用友U9cloud?
  16. EBS R12: 通过FND_PRODUCT_INSTALLATIONS中字段STATUS确认安装使用了哪些产品(或模块)
  17. 问菩萨为何倒坐,叹众生不肯回头
  18. bitbake hello world demo 实验
  19. 计量广义差分操作过程_计量经济学总结
  20. Android 下载文件获取对应链接文件的名称及扩展名

热门文章

  1. 全球与中国汽车密封型微动开关市场现状及未来发展趋势
  2. c语言保龄球计分程序,c语言程序设计--保龄球计分系统,绝对可用,完美测试.doc...
  3. ANDROID 开源书架
  4. 电子相册模板从头学起
  5. H264中的NALU概念解析-NALU读法
  6. CSDN-markdown编辑器使用手册转为pdf并打印(快捷键版)
  7. 爬虫s5(爬取请求的cookie)
  8. 互融云保理业务系统助力企业快速拓展业务
  9. 阿里、腾讯、华为爆发云巅大战(转载)
  10. Becky!经典使用问题集(0516版)