Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >EXT.NET高效开发(四)——实用技巧

EXT.NET高效开发(四)——实用技巧

作者头像
雪雁-心莱科技
发布于 2018-12-27 02:41:12
发布于 2018-12-27 02:41:12
1.2K00
代码可运行
举报
文章被收录于专栏:magicodesmagicodes
运行总次数:0
代码可运行

很久没有发文了,一是忙上线的事。二是有些颓废了,身体虚弱了,感觉工作没有激情了,不太想写。好了,既然承诺了写下去,那么就坚持吧。

俗话说“授人以鱼,不如授之以渔”,下面就开始本篇之旅吧。

1)检测浏览器与IE版本。

这里是在后台检查,然后输出相应的Extjs脚本,你也可以在前台写JS检测。

这里没有使用EXT.NET的对象,直接写的纯Extjs。

这里是在后台代码进行判断,首先获取浏览器信息判断,然后注册相应的Extjs脚本。当用户点是,则下载。注释很完整,就不多做解释了。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
         if (!IsPostBack)
            {
                HttpBrowserCapabilities _hbc = Request.Browser;
                //如果是IE并且主版本低于8,则弹出一个模式窗口,显示警告和下载页面(需要客户将网站加入到信任列表)
                if (_hbc.IsBrowser("IE"))
                {
                    //低于IE8
                    if (_hbc.MajorVersion < 8)
                    {
                        //弹出确认提示框
                        string _strScript = "Ext.onReady(function(){Ext.MessageBox.confirm('警告', '<b style=\"color:red;\">*您的IE版本过低,存在安全隐患,并可能造成部分功能无法访问,建议您立刻升级您的IE浏览器。</b><br />*是否立即升级您的浏览器,以获取更佳更安全的体验?<br />*如果您已经安装IE8,浏览器仍弹出此对话框,请重启电脑再试。', function(btn){if(btn=='yes')window.location.href='/FormServerTemplates/UploadIEVersion.aspx?DownLoad=true';});});";
                        //注册脚本块
                        Page.ClientScript.RegisterClientScriptBlock(Page.GetType(), "updateIE", _strScript, true);
                    }
                }
                else
                {
                    //对非IE浏览器仅弹出警告
                    string _strScript = " Ext.MessageBox.alert('警告','您正在使用非IE浏览器访问,可能部分功能无法访问。');";
                    Page.ClientScript.RegisterClientScriptBlock(Page.GetType(), "updateIE", _strScript, true);
                }
            }

当然,你也可以在前台写JS来检查。如下面代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
        Ext.onReady(function () {
            if (Ext.isChrome) {
                Ext.Msg.alert("浏览器检测", "你使用的是Chrome");
            }
            if (Ext.isIE) {
                Ext.Msg.alert("浏览器检测", "你使用的是IE");
            }
            if (Ext.isIE6) {
                Ext.Msg.alert("浏览器检测", "你使用的是IE");
            }
            if (Ext.isIE7) {
                Ext.Msg.alert("浏览器检测", "你使用的是IE7");
            }
            if (Ext.isIE8) {
                Ext.Msg.alert("浏览器检测", "你使用的是IE8");
            }
            if (Ext.isOpera) {
                Ext.Msg.alert("浏览器检测", "你使用的是Opera");
            }
            if (Ext.isGecko3) {
                Ext.Msg.alert("浏览器检测", "你使用的是火狐");
            }
	);
代码语言:javascript
代码运行次数:0
运行
复制

2) 检测是否安装了Silverlight4.0。

个人对Silverlight也比较喜爱,所以项目中不可避免的会用到。比如上传,施工计划系列(Silverlight——施工计划日报表(四)——自适应浏览器窗口Silverlight——施工计划日报表(三)Silverlight——施工计划日报表(二)Silverlight——施工计划日报表(一))等等。所以检测客户端是否安装了Silverlight也是不可避免的了。这点虽然与Extjs不能挂钩,但是也许大家也有用得着的地方。接下来的随笔还会介绍EXT.NET如何与Silverlight结合布局。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<script type="text/javascript">
    function CheckSilverlightInstalled() {
        var isSilverlightInstalled = false;
        try {
            try {
                var slControl = new ActiveXObject('AgControl.AgControl'); //检查IE
                isSilverlightInstalled = true;
            } catch (e) {
                if (navigator.plugins["Silverlight Plug-In"])
                //检查非IE 
                { isSilverlightInstalled = true; }
            }
        } catch (e) { } return isSilverlightInstalled;
    }
    if (!CheckSilverlightInstalled) {
        Ext.onReady(function() { Ext.MessageBox.confirm('警告', '<b style=\"color:red;\">*您未安装Silverlight 4.0版本(大约5M),请立即安装。点击【是】立即下载安装。</b><br />*上传附件以及施工计划需要Silverlight 4.0支持。<br />*Silverlight是微软丰富型互联网应用程序策略的主要应用程序开发平台之一,请放心使用。', function(btn) { if (btn == 'yes') window.location.href = '/FormServerTemplates/UploadIEVersion.aspx?DownLoad=true'; }); });
    }
</script>

3)下载

总是有人问,为什么使用EXT.NET的服务器事件无法实现下载,或者没反应,后台写的操作也不起作用了,或者点击按钮就出乱码了。其实想想就明白了,EXT.NET在后台对前台进行操作,依赖的是Extjs,也就是它会向前台输送Javascript,干的好好的,你突然向人家输送一个文件流,那么人家就不认了。那么怎么实现下载呢?其实很简单,不要写在DirectEvent事件中,或者在另一个页面进行处理(放心,浏览器不会跳转)。 比如在页面上进行下载,页面上的列模型如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<ColumnModel ID="ColumnModel2" runat="server">
                       <Columns>
                           <ext:RowNumbererColumn />
                           <ext:Column Header="附件ID" Hidden="true" DataIndex="Id">
                           </ext:Column>
                           <ext:Column Header="文件名" DataIndex="FileName">
                           </ext:Column>
                           <ext:DateColumn Header="创建日期" DataIndex="CreateDate" Format="yyyy-MM-dd" />
                           <ext:Column Header="上传用户" DataIndex="UserName" />
                           <ext:CommandColumn Header="操作">
                               <Commands>
                                   <ext:GridCommand Icon="PagePaste" CommandName="DownLoad" Text="下载" />
                               </Commands>
                           </ext:CommandColumn>
                       </Columns>
                   </ColumnModel>
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
那么怎么实现这个下载呢?添加监听事件如下:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<Listeners>
    <Command Handler="cellCommand(command, record);" />
</Listeners>

然后写下下面的JS函数:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
      function cellCommand(command, record)
        {
            if(command=='DownLoad')
                window.location.href="/FormServerTemplates/DownLoad.aspx?Id="+record.data.Id+"&FileName="+escape(record.data.FileName);
        }

然后在这个页面DownLoad.aspx去处理你的下载逻辑就行了。比如下面的函数:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
private void DownLoadIE(int _type)
        {
            Response.ContentType = "application/x-zip-compressed";
            Response.AddHeader("Content-Disposition", "attachment;filename=IE8-WindowsXP-x86-CHS.exe");
            string filename = Server.MapPath("~/DownLoad/IE8/IE8-WindowsXP-x86-CHS.exe");
            Response.TransmitFile(filename);
        }

刚才说的是在页面上下载,那么假如我要在EXT.NET服务器事件(DirectEvent)中下载怎么办呢?也不难,只要跳转就行:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
        protected void btnDownLoad_Click(object sender, DirectEventArgs e)
        {
            Session["RPTPackageNotice"] = _rptPackageNotice;
            X.Redirect("/FormServerTemplates/DownLoad.aspx", "请稍候,下载马上就开始了...");
        }

这里,你也可以使用Response.Redirect来进行跳转哦。至于新页面的数据,你可以考虑放在Session或者Cache里面(用完了记得删哦),也可以重新从数据库中获取。是不是挺方便呢,赶快回家试试吧。

4)后台执行JS或者调用前台函数

如果你希望在DirectEvent事件中执行js,那么可以这么做:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
        X.Js.Alert("测试");
        X.Js.AddScript("alert(0);");
        X.Js.Confirm("确认", "alert('已确认!');");
        X.Js.Call("alert", 1);
        X.AddScript("alert(2);");
        ResourceManager1.AddScript("alert(3);");

这几种写法都是可行的,最终会向浏览器输出如下内容:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{script:"alert(\"测试\");alert(0);(function(){var result=confirm(\"确认\");alert('已确认!');})();alert(1);alert(2);alert(3);"}

这下子,你明白了EXT.NET是如何在后台对界面进行更改的吧。其实上面的这么多函数,最终调用的都是ResourceManager1.AddScript函数哦。也许大家对这些函数用的不多,但本人却相当喜欢。有时候写写JS也是一种不错的享受,拼来拼去,还不就是为了这结果。

5)页面提示跳转

既然人家封装了,既然用的是EXT.NET,改用的还是要用的。比如上面的代码:

X.Redirect("/FormServerTemplates/DownLoad.aspx", "请稍候,下载马上就开始了...");

显示效果如下:

这样更友好,其实其原理也很简单,如下面代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
            ResourceManager rm = ResponseManager.ResourceManager;
            if (msg.IsNotEmpty())
            {
                X.Mask.Show(new MaskConfig
                {
                    Msg = msg,
                    MsgCls = msgCls
                });
            }

            rm.AddScript("window.location=\"".ConcatWith(TokenUtils.IsRawToken(url) ? url : rm.ResolveClientUrl(url), "\";"));

也就是首先获取当前的ResourceManager 对象,显示一个带消息的遮罩层,然后添加window.location转向。

6)在后台获取某个EXT.NET控件。

你可以使用ControlUtils.FindControl来获取,也可以使用容器空间的FindControl方法来获取,都一样方便。但是本人比较喜欢后者。找到之后,转化一下,就可以进行平常的操作了。

比如下面的代码,获取控件之后,进行了类型判断,禁用该控件。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
                        Control _control = userControl.FindControl(_controlFiled.Value);
                        if (_control == null)
                        {
                            LogManager.WriteWarningLog(string.Format("控件{0}不存在!", _controlFiled.Value));
                            continue;
                        }
                        if (_control is TextFieldBase)
                            (_control as TextFieldBase).Disabled = Convert.ToBoolean(_controlFiled.Attribute("Disabled").Value);
                        else if (_control is CheckboxBase)
                            (_control as CheckboxBase).Disabled = Convert.ToBoolean(_controlFiled.Attribute("Disabled").Value);
                        else if (_control is CheckboxGroupBase)
                            (_control as CheckboxGroupBase).Disabled = Convert.ToBoolean(_controlFiled.Attribute("Disabled").Value);
                        else if (_control is PanelBase)
                            (_control as PanelBase).Disabled = Convert.ToBoolean(_controlFiled.Attribute("Disabled").Value);

但是个人建议不要这么写,还是直接输出JS来的快,简单又方便,不过前提是你得判断下它是否存在setDisabled函数,当然ID要的是客户端ID。这下你明白了为什么本人有时候喜欢写JS的原因了么?简介、方便、直观、高效。

写累了,就此打住好了。不出意外的话,下一篇写写怎么结合ASP.NET服务器控件,怎么结合Silverlight等等。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2011-08-27 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
EXT.NET复杂布局(二)——报表
前面提到过工作台(《EXT.NET复杂布局(一)——工作台》)了,不知道各位看过之后有什么感想。这次就介绍介绍使用EXT.NET画几个报表。
雪雁-心莱科技
2018/12/27
1.1K0
Ext.Net常用方法
1、js(Ext)操作 Ext.Msg.alert('系统提示', '未连接血站,该功能暂时不能使用。'); Ext.getCmp("id").getValue(); Ext.getCmp("id").focus(); Ext.getCmp("id").selectText(); 2、后置类选择提示窗口 X.Msg.Confirm("系统提示", "确认保存复检信息?", new MessageBoxButtonsConfig { Yes = new MessageBoxButtonConfi
磊哥
2018/05/08
1.1K0
Ext.Net常用方法
ExtJs一(Hello World)
  本文原文链接地址 http://aehyok.com/Blog/Detail/48.html
aehyok
2019/02/25
9250
Ext常用组件
表单是客户端和服务器交互的一种重要方式,Ext表单控件在界面体验效果的美观度及功能的全面性上都有着首屈一指的影响力,表面上,表单控件只是添加了一些 CSS样式,但它在数据校验方面非常灵活。
用户9184480
2024/12/17
520
ExtJs十(ExtJs Mvc用户管理之二)
为了防止意外情况,这里添加了try模块,在错误的时候会将错误信息作为Msg关键字的值返回。
aehyok
2018/09/11
6.7K0
ExtJs十(ExtJs Mvc用户管理之二)
初识Ext.NET
以前从没想过会用到ExtJS,总是对它有着一种反感:认为脚本资源大,执行脚本多,性能差等等。最近因为一个项目使用到了,就用上了。相对JQuery,ExtJS没有那么方便灵活,但是其界面美观,功能实用,可以节约不少开发时间。玩ExtJS,就感觉是在玩配置,也许Java程序员会习惯些。熟悉那些配置无疑也是一件麻烦而且棘手的事情,稍不留心,就得为自己的失误埋单。虽然网上有些设计器,但是大都满足不了需求。后来,在网上找到一款还不错的框架——Ext.NET。这对于.NET开发人员来说,能节省不少时间。至少带智能提示的xml配置怎么也要比写js要顺手方便多了。而且其还是免费开源的。不过在使用过程中,也没有那么顺畅。
雪雁-心莱科技
2018/12/27
1.6K0
EXT.NET高效开发(一)——概述
之前就有想法说说这方面,直到看到我上一篇博客《EXT.NET复杂布局(一)——工作台》的回复:
雪雁-心莱科技
2018/12/27
1.1K0
EXT.NET复杂布局(一)——工作台
前面已经提到过EXT.NET了。EXT.NET是一组基于ExtJS库开发的开源的ASP.NET组件。
雪雁-心莱科技
2018/12/27
2.3K0
Extjs-lesson3
Ext.js 系列课程笔记「组件」更多精彩文章请关注公众号『Pythonnote』或者『全栈技术精选』
小闫同学啊
2020/06/28
1.4K0
EXT.NET高效开发(二)——封装函数
在上一篇《EXT.NET高效开发(一)——概述》中,大致的介绍了一下EXT.NET。那么本篇就要继续完成未完成的事业了。说到高效开发,那就是八仙过海各显神通。比如使用代码生成器,这点大家可以参考我的这篇帖子《CodeSmith系列(三)——使用CodeSmith生成ASP.NET页面》。本人是比较推崇批量化生产的。当然,本篇的重点不在这,看过标题的人都知道。
雪雁-心莱科技
2018/12/27
1.3K0
EXT表单
var doSearch=function() { //Ext.Msg.alert('提示','操作已经成功'); location.href ='d.php'; }
Java架构师必看
2021/03/22
6.1K0
EXT表单
CodeSmith系列(二)——使用CodeSmith生成ASP.NET后台代码
因为表单的后台代码都差不多,所以采用了CodeSmith生成。由于表单的控制是基于XML的,所以可以根据XML自定义生成。由于没时间,就不多写了,具体模板代码见最后。 在这里,先选择变量。如下: X
雪雁-心莱科技
2018/12/27
3.1K0
Ext简单demo示例
1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> 2 <html> 3 <head> 4 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 5 <title>Ext简单demo示例</title> 6 <link rel="stylesheet" type="t
用户1112962
2018/07/04
6460
EXT基础
–Ext是一个Ajax框架,可以用来开发带有华丽外观的富客户端应用,使得我们的b/s应用更加具有活力及生命力,提高用户体验。
Java架构师必看
2021/03/22
4.3K0
EXT基础
对于Ext.data.Store 介紹 与总结,以及对以前代码的重构与优化
     对于Ext.data.Store 一直不是很了解,不知道他到底是干嘛的有哪些用处,在实际开发中也由于不了解也走了不少弯路, store是一个为Ext器件提供record对象的存储容器,行为和属性都很象数据表.   由于刚学不是太懂,都是比葫芦画瓢,东搬西畴的去完成功能.程序思路都是自己想象的,对于rest方式的增删改查全是采用另外一种方式去实现的,最后研究发现其实,store都 已经有了这些函数,根本不用自己去实现.下面看下以前所写的代码:这是model,store ,gridpanel var
hbbliyong
2018/03/05
1.8K0
ExtJs九(ExtJs Mvc用户管理之一)
首先要做的是为用户信息创建一个模型,在Scripts\app\model目录下创建一个名为User.js的文件,然后添加以下模型定义代码:
aehyok
2018/09/11
4.8K0
ExtJs九(ExtJs Mvc用户管理之一)
EXT.NET复杂布局(四)——系统首页设计(下)
注意beforedestroy事件,这个事件可以在窗口关闭后通知你,有了这个通知事件,想干啥都方便了。在示例中,本人是显示消息。
雪雁-心莱科技
2018/12/27
2.1K0
extjs_03_grid(添加数据)
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/117265.html原文链接:https://javaforall.cn
全栈程序员站长
2022/07/06
4930
extjs_03_grid(添加数据)
EXT.NET复杂布局(三)——复杂表单布局
在开发中,我们总是会遇到很多比较复杂的表单。那么,怎么对这些复杂表单进行布局无疑是一个值得思考的问题,这往往也折磨着很多程序员。那么本节就来讲述如何使用EXT.NET对复杂的表单进行布局。
雪雁-心莱科技
2018/12/27
1.2K0
EXT按钮事件
在EXT中,当我们要为按钮点击添加处理function的时候,可以看到一般人的实现分成2类:
Java架构师必看
2021/03/22
2.7K0
EXT按钮事件
相关推荐
EXT.NET复杂布局(二)——报表
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验