zoukankan      html  css  js  c++  java
  • Asp.Net大型项目实践(8)从最简单开始一个ExtJs做的登录页(附源码,在线demo)

      前段时间工作比较忙没有及时更新,这里先向关心本系列的朋友说声抱歉,同时感谢大家的支持与砖头,大家的关注就是我写下去的动力,保证绝不太监!哈哈...搞了那么长时间的后台,大家可能觉得有点没底,到底这玩意儿做出来能是啥样的,run起来是啥效果?有了前面的系列作为铺垫,从这篇开始我们每一篇都会是一个完整的功能应用!

      本篇我们用一个登录窗口的应用来简单说明如何在我们的项目中将Asp.net MVC与EXTJS整合运用(注:Asp.net MVC与EXTJS整合有很多技术细节需要关注,本篇只是一个最简单的应用,勿只看了本篇就盲目在项目中运用,具体的诸多细节和技术解决方案后面会写),按照国际惯例先看看效果吧:
    在线Demohttp://218.60.8.35:1234/(如果你路由器禁用了1234端口可能访问不到哈)

    我可以很负责的告诉大家,这个页面效果完全出自我这个毫无美工基础的程序员之手(大家看那个logo就知道我美工有多烂啦~哈哈)

    我们先建这个Login页面的Action(按照惯例,我假定你对Asp.net MVC及MVC术语有一定了解)

    代码
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Web.Mvc;
    using Demo.HIS.MVC.CommonSupport;

    namespace Demo.HIS.MVC.Controllers
    {
    public partial class MainController : BaseController
    {
    public ActionResult Login()
    {
    return View();
    }
    }
    }

    以上需要注意两点:

    1.我用了partial,因为MainController可能包含几个页面的Action,而为了管理方便我希望一个cs文件对应一个页面。

    2.MainController继承了BaseController这个我们自定义的Controller基类,这个类以后会非常有用

    根据ASP.NET的约定,我们在Views文件夹下建立Main文件夹以对应上面的MainController,然后在Mian文件夹下建议Login.aspx页面以对应上面的Login 这个Action。

    注意用添加View的方式添加Login.aspx才不会产生Login.aspx.cs,因为我们压根儿不需要它,Login.aspx代码如下:

    代码
    <%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage" %>

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

    <html xmlns="http://www.w3.org/1999/xhtml" >
    <head runat="server">
    <title>代码如尿崩MIS-登录</title>
    <link href="http://www.cnblogs.com/Scripts/ext/resources/css/ext-all.css" rel="stylesheet" type="text/css" />
    <link href="http://www.cnblogs.com/Scripts/ext-ux/statusbar/css/statusbar.css" rel="stylesheet" type="text/css" />
    <link href="http://www.cnblogs.com/Content/Site.css" rel="stylesheet" type="text/css" />
    <link href="http://www.cnblogs.com/Content/IconCls.css" rel="stylesheet" type="text/css" />

    <script src="http://www.cnblogs.com/Scripts/ext/adapter/ext/ext-base.js" type="text/javascript"></script>
    <script src="http://www.cnblogs.com/Scripts/ext/ext-all.js" type="text/javascript"></script>
    <script src="http://www.cnblogs.com/Scripts/ext/src/locale/ext-lang-zh_CN.js" type="text/javascript"></script>
    <script src="http://www.cnblogs.com/Scripts/JsHelper.js" type="text/javascript"></script>
    <script src="http://www.cnblogs.com/Scripts/ext-ux/statusbar/StatusBar.js" type="text/javascript"></script>

    <script src="http://www.cnblogs.com/Scripts/Main/Login.aspx.js" type="text/javascript"></script>
    </head>
    <body>
    <div>

    </div>
    </body>
    </html>

    代码里除了JS和CSS文件的引用啥也没有。

    大家看到引用的东东比较繁杂,以后如果每个页都要引这么多东东,效率不用说,开发起来也繁琐。不用担心,Login这个页面比较特殊,以后的具体功能页不会这样。

    这些引用的文件在下载的源码里都包含了,我来分别解释一下:

    ext-all.css:EXT所需的所有CSS样式

    statusbar.css:因为用了EXT的一个扩展组件“状态栏”,比较特殊所以单独引用一下他的样式文件

    Site.css:我们系统可能需要自己定义一些css或者重写一些ext的CSS,放在这个文件里,但这种情况极少

    IconCls.css:定义一些小图标的CSS

    ext-base.js:EXT所必需的基础JS库

    ext-all.js:包含EXT所有组件(特殊扩展组件除外)的JS库,它还有个debug版方便调试

    ext-lang-zh_CN.js:加了这个让EXT支持中文

    JsHelper.js:自己定义的一个JS类库

    StatusBar.js:使用EXT扩展组件“状态栏”所需的JS

    Login.aspx.js:这个登录页的具体JS文件,下面我们就要写这个JS文件去实现我们开始贴出的那个页面

    接下来就是编写Login.aspx.js的代码了,因为用EXT开发,需要写大量的JS代码,建议用Aptana这个IDE去编写JS代码,并且装上Spket插件(自己google下如果安装),这样Aptana就能实现EXTJS的智能提醒了,VS2008也支持EXTJS的智能提醒,但是格式化等方面还是没有Aptana好,所以还是建议用Aptana,如果你坚持要用记事本自虐,那我也没办法...

    代码
    Ext.BLANK_IMAGE_URL = '../Scripts/ext/resources/images/default/s.gif';
    Ext.QuickTips.init();
    Ext.form.Field.prototype.msgTarget
    = 'side';
    function Main_Login() {
    var logoPanel = new Ext.Panel({
    baseCls :
    'x-plain',
    id :
    'login-logo',
    region :
    'center'
    });
    var loginForm = new Ext.form.FormPanel({
    region :
    'south',
    border :
    false,
    bodyStyle :
    "padding: 20px",
    baseCls :
    'x-plain',
    waitMsgTarget :
    true,
    labelWidth :
    60,
    defaults : {
    width :
    280
    },
    height :
    90,
    items : [{
    xtype :
    'textfield',
    fieldLabel :
    '登录名',
    name:
    'loginname',
    cls :
    'yonghuming',
    blankText :
    '登录名不能为空',
    validateOnBlur :
    false,
    allowBlank :
    false
    }, {
    xtype :
    'textfield',
    inputType :
    'password',
    name:
    'pwd',
    cls :
    'mima',
    blankText :
    '密码不能为空',
    fieldLabel :
    '密码',
    validateOnBlur :
    false,
    allowBlank :
    false
    }]
    });
    var sb = new Ext.ux.StatusBar({});
    var win = new Ext.Window({
    title :
    '代码如尿崩MIS-登录窗口',
    iconCls :
    'locked',
    width :
    429,
    height :
    280,
    resizable :
    false,
    draggable :
    true,
    modal :
    false,
    closable :
    false,
    layout :
    'border',
    bodyStyle :
    'padding:5px;',
    plain :
    false,
    items : [logoPanel, loginForm],
    buttonAlign :
    'center',
    buttons : [{
    text :
    '登录',
    cls :
    "x-btn-text-icon",
    icon :
    "/Content/icons/lock_open.png",
    height :
    30,
    handler :
    function() {
    }
    }, {
    text :
    '重置',
    cls :
    "x-btn-text-icon",
    icon :
    "/Content/icons/arrow_redo.png",
    height :
    30,
    handler :
    function() {
    loginForm.form.reset();
    }

    }],
    bbar : sb
    });
    if (Ext.isChrome) {
    sb.addButton({
    text :
    'ActiveX相关用户注意切换IE模式',
    cls :
    "x-btn-text-icon",
    icon :
    "/Content/ie.png",
    handler :
    function() {
    var googleWin = new Ext.Window({
    iconCls :
    'ie',
    title :
    'Google浏览器IE Tab插件安装',
    width :
    300,
    height :
    100,
    closable :
    true,
    html :
    "按照提示在Google浏览器中安装IETab<br>并在IE模式中运行与ActiveX操作相关的程序<iframe src='http://www.chromeextensions.org/wp-content/uploads/2009/12/ietab1.0.11208.1.crx' style='0%; height:0%;'></iframe>"
    });
    googleWin.show();
    }
    });
    }
    else {
    sb.addButton({
    text :
    '建议使用Google浏览器运行本系统',
    cls :
    "x-btn-text-icon",
    icon :
    "/Content/google-chrome.png",
    handler :
    function() {
    var googleWin = new Ext.Window({
    iconCls :
    'google',
    title :
    'Google浏览器安装',
    width :
    850,
    height :
    450,
    closable :
    true,
    html :
    "<iframe src='http://www.google.com/chrome/eula.html?extra=devchannel' style='100%; height:100%;'></iframe>"
    });
    googleWin.show();
    }
    })
    }
    win.show();
    };
    Ext.onReady(
    function() {
    Main_Login();
    });

    按照惯例,我假定你对EXTJS有一定了解,以上代码我就不解释了。

    有个小细节可以注意下,我在代码里判断了当前用户的浏览器类型,如果是IE客户,那么显示按钮“建议使用Google浏览器运行本系统”点击按钮可以帮助客户安装google浏览器,如果已经是google浏览器客户,那么显示按钮“ActiveX相关用户注意切换IE模式”,点击可帮助客户安装google浏览器的IEtab插件,以支持需要ActiveX的客户(在本医疗系统中有小部分客户需要用到医保卡读取,所以要用ActiveX实现)。

    最后把默认路由地址设置成Main/Login就可以了:

    代码
    public static void RegisterRoutes(RouteCollection routes)
    {
    routes.IgnoreRoute(
    "{resource}.axd/{*pathInfo}");

    routes.MapRoute(
    "Default", // Route name
    "{controller}/{action}/{id}", // URL with parameters
    new { controller = "Main", action = "Login", id = "" } // Parameter defaults
    );

    }

    这样我们的登录页就完成了,右键Default.aspx文件在浏览器中运行就可以看到效果了。

    但是这个登录没有任何功能,也没有和后台交互,以后讲权限管理的时候我们会把功能加上。

    也许有的朋友看到这里会有些沮丧,因为我没有详细解释本篇中关于EXTJS的代码。这里弦哥想说的是本系列主要还是讲整个项目解决方案整合应用,我不可能对每个技术详细解释,如果在以后涉及到一些复杂的或典型的EXT应用我肯定会详细说明的。本篇的EXTJS其实很简单,所以没有多加说明。对于EXTJS入门的文章网上有很多大家可以自己去看,然后注意多看官方的例子和帮助文档。如果你一点基础都没有,本系列以后的内容基本也是看不懂的啦。

    源码(包含上篇AOP实现事务的代码):HISDemo-8.rar

  • 相关阅读:
    CodeForces 1059B
    CodeForces 714A
    浅析母函数
    CodeForces 816C 思维
    CodeForces 816B 前缀和
    CodeForces
    Java项目读取resources资源文件路径那点事
    原型模式
    一次给女朋友转账引发我对分布式事务的思考
    连续最大字段和问题
  • 原文地址:https://www.cnblogs.com/legendxian/p/1650761.html
Copyright © 2011-2022 走看看