MSPlus WebControls For ASP.NET. (服务器端控件)

Upgrade Develop Efficiency,Surprise For U! - Mack.Z

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  22 随笔 :: 42 文章 :: 938 评论 :: 14 引用

2005年7月28日 #

     摘要: 昨晚上写了一篇"压缩ASP.NET中的ViewState"的文章,大家都对这种方式是否会带来性能上消耗的问题比较关心.有一点是肯定的,压缩ViewState的减少网络带宽的占用,肯定会对性能有影响.我作了一个小小的测试.先后用同一个页面加密和不加密的情况下,刷新页面观测w3wp.exe的CPU占用情况.此页面的ViewState大小为3.996 Bytes w3wp.exe 以下是每次刷新的时CP...  阅读全文
posted @ 2005-07-28 19:55 Mack.Z 阅读(7449) | 评论 (31)编辑

2005年7月27日 #

服务器端控件带来的好外我在这就不多说了,但多过的使用服务器端件保存控件的状态会带来大量的ViewState的情况大家一定遇到过吧.过多的ViewState会很大程度上降低页面的加载速度制成服务器端的性能下降.

以下是结合CSharpZipLib对ViewState进行压缩的方法.

MSPlus.Web.UI.Page 源码:
using System;
using System.Web.UI;
using System.IO;
using ICSharpCode.SharpZipLib.Zip.Compression;

namespace MSPlus.Web.UI
{
    
/// <summary>
    
/// 压缩ViewState By Mack.Z (MSPlus)
    
/// </summary>

    public class Page : System.Web.UI.Page
    
{

        
protected override void SavePageStateToPersistenceMedium(Object pViewState)
        
{
            LosFormatter mFormat 
= new LosFormatter();
            StringWriter mWriter 
= new StringWriter();

            mFormat.Serialize(mWriter, pViewState); 
            String mViewStateStr 
= mWriter.ToString(); 

            
byte[] pBytes = System.Convert.FromBase64String(mViewStateStr);

            pBytes 
= Compress(pBytes); 

            String vStateStr 
= System.Convert.ToBase64String(pBytes); 

            RegisterHiddenField(
"__MSPVSTATE", vStateStr);
        }


        
protected override Object LoadPageStateFromPersistenceMedium()
        
{
            String vState 
= this.Request.Form.Get("__MSPVSTATE");

            
byte[] pBytes = System.Convert.FromBase64String(vState);

            pBytes 
= DeCompress(pBytes);

            LosFormatter mFormat 
= new LosFormatter();

            
return mFormat.Deserialize(System.Convert.ToBase64String(pBytes));
        }



        
public static byte[] Compress(byte[] pBytes) 
        

            MemoryStream mMemory 
= new MemoryStream();

            Deflater mDeflater 
= new Deflater(ICSharpCode.SharpZipLib.Zip.Compression.Deflater.BEST_COMPRESSION);
            ICSharpCode.SharpZipLib.Zip.Compression.Streams.DeflaterOutputStream mStream 
= new ICSharpCode.SharpZipLib.Zip.Compression.Streams.DeflaterOutputStream(mMemory,mDeflater,131072);

            mStream.Write(pBytes,
0,pBytes.Length);
            mStream.Close();

            
return mMemory.ToArray();
        }
 


        
public static byte[] DeCompress(byte[] pBytes) 
        

            ICSharpCode.SharpZipLib.Zip.Compression.Streams.InflaterInputStream mStream 
= new ICSharpCode.SharpZipLib.Zip.Compression.Streams.InflaterInputStream(new MemoryStream(pBytes));
            
            MemoryStream mMemory 
= new MemoryStream();
            Int32 mSize;

            
byte[] mWriteData = new byte[4096];

            
while(true)
            
{
                mSize 
= mStream.Read(mWriteData, 0, mWriteData.Length);
                
if (mSize > 0)
                
{
                    mMemory.Write(mWriteData, 
0, mSize);
                }

                
else
                
{
                     
break;
                }

            }


            mStream.Close();
            
return mMemory.ToArray();
        }
 

    }

}


使用方法(ASPX.CS页面继承MSPlus.Web.UI.Page):public class PageClass : System.Web.UI.Page


测试下来的结果:压缩后的ViewState只有原来的20%!


我作了一个小小的测试.先后用同一个页面加密和不加密的情况下,刷新页面观测w3wp.exe的CPU占用情况.此页面的ViewState大小为3.996 Bytes

w3wp.exe 以下是每次刷新的时CPU的情况

05 03 05 03 06 05 05 08 03 05 03 不加密,平均是 4.6
05 05 06 05 05 03 08 02 03 05 06 加密,平均是5.3

posted @ 2005-07-27 21:47 Mack.Z 阅读(5374) | 评论 (25)编辑

2005年7月14日 #

MSPlus.TabControl支持状态保存,SelectedIndexChanged事件,支持多层嵌套等功能,支持动态新增删除修改TabPage并保存其状态...

MSPlus.TabControl常用属性和方法以及事件的说明:

MSPlus.TabControl.Width = 控件的宽度
MSPlus.TabControl.Height = 控件的高度
MSPlus.TabControl.SelectedIndex  = 获取或设置选中的Tab页索引编号
MSPlus.TabControl.SelectionMode(Server or Client)= 每次Tab页的切换在客户端完成还是每次都需要返回服务器端
MSPlus.TabControl.Items = 获取所有Tab页的容器
MSPlus.TabControl.SelectedIndexChanged(事件)= Tab选中页改变时触发的事件

MSPlus.TabPage常用属性和方法的说明:
MSPlus.TabPage.ID = TabPage编号(不可重复)
MSPlus.TabPage.Caption = TabPage的标题
MSPlus.TabPage.Enabled = TabPage是否可用
MSPlus.TabPage.Visabled = TabPage是否显示

MSPlus.TabControl.Items 常用属性和方法的说明
public void Add(TabPage pTab)  动态增加一个页
public void Insert(Int32 pIndex, TabPage pItem)  动态插入一个页
public void Remove(TabPage pTab)  动态移除一个页
public Boolean Contains(TabPage pTab) 指定的页是否存在
public int IndexOf(TabPage pItem) 指定页的索引编号
public void CopyTo(TabPage[] pArray, Int32 pIndex) 批量指定位置的复制


下载MSPlus.TabControl V1.1 演示和控件 - 2005-7-15

posted @ 2005-07-14 22:55 Mack.Z 阅读(4124) | 评论 (48)编辑



MSPlus.TabControl支持状态保存,SelectedIndexChanged事件,支持多层嵌套等功能...

MSPlus.TabControl常用属性和方法以及事件的说明:

Unit Width = 控件的宽度
Unit Height = 控件的高度
Int32 SelectedIndex  = 获取或设置选中的Tab页索引编号
SelectionMode(Server or Client)= 每次Tab页的切换在客户端完成还是每次都需要返回服务器端
Items = 获取所有Tab页的容器
SelectedIndexChanged(事件)= Tab选中页改变时触发的事件

使用样例:

<%@ Register TagPrefix="msp" Namespace="MSPlus" Assembly="MSPlus.TabControl" %>

..

<LINK href="Common/CSS/Default.CSS" type="text/css" rel="stylesheet">
<script language="JavaScript" src="Common/JavaScript/Tab.js"></script>

..

<msp:tabcontrol id="TabControl1" style="Z-INDEX: 100; LEFT: 128px; POSITION: absolute; TOP: 80px"
    runat
="server" SelectionMode="Server" width="500" height="150">
    
<msp:TabPage Caption="春暖花开" ID="tabPage1">
        
<msp:TabControl id="TabControl2" runat="server" height="120">
            
<msp:TabPage Caption="春暖" ID="tabPage11">多层TabControl嵌套</msp:TabPage>
            
<msp:TabPage Caption="夏日" ID="tabPage21"></msp:TabPage>
            
<msp:TabPage Caption="秋高" ID="tabPage31"></msp:TabPage>
            
<msp:TabPage Caption="冬季" ID="tabPage41"></msp:TabPage>
        
</msp:TabControl>
    
</msp:TabPage>
    
<msp:TabPage Caption="夏日炎炎" ID="tabPage2">
        
<asp:TextBox id="TextBox1" runat="server"></asp:TextBox>
        
<br>
        
<asp:Button id="Button3" Text="DoPostBack(测试状态保存)" runat="server"></asp:Button>
    
</msp:TabPage>
    
<msp:TabPage Caption="秋高气爽" ID="tabPage3">
        
<asp:Button id="Button2" Text="DoPostBack" runat="server"></asp:Button>
    
</msp:TabPage>
    
<msp:TabPage Caption="冬季运动" ID="tabPage4">
        
<asp:CheckBox id="CheckBox1" runat="server"></asp:CheckBox>
    
</msp:TabPage>
</msp:tabcontrol>

namespace TabControlDemo
{
    
/// <summary>
    
/// WebForm1 的摘要说明。
    
/// </summary>

    public class WebForm1 : System.Web.UI.Page
    
{
        
protected MSPlus.TabControl TabControl1;
    
        
private void Page_Load(object sender, System.EventArgs e)
        
{
            
// 在此处放置用户代码以初始化页面
        }


        
#region Web 窗体设计器生成的代码
        
override protected void OnInit(EventArgs e)
        
{
            
//
            
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
            
//
            InitializeComponent();
            
base.OnInit(e);
        }

        
        
/// <summary>
        
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
        
/// 此方法的内容。
        
/// </summary>

        private void InitializeComponent()
        
{    
            
this.TabControl1.SelectedIndexChanged += new System.EventHandler(this.TabControl1_SelectedIndexChanged);
            
this.Load += new System.EventHandler(this.Page_Load);

        }

        
#endregion


        
private void TabControl1_SelectedIndexChanged(object sender, System.EventArgs e)
        
{
            事件被触发
        }


    }


需要源码的朋友,可留下EMAIL

下载MSPlus.TabControl V1.0 Beta演示和控件



查看MSPlus.TabControl V1.1 更新说明

下载MSPlus.TabControl V1.1 演示和控件 - 2005-7-15

posted @ 2005-07-14 00:16 Mack.Z 阅读(5525) | 评论 (115)编辑

2005年7月9日 #

将HTML网页(文本)等转换为图片的类库



以上是使用 HtmlConvertImage (Html2Image) 类库所作的演示小工具


MSPlus.HtmlConvertImage mHCont = new MSPlus.HtmlConvertImage();


//设置图片的长度,如果网页的长度超过一张图片的长度时自己将其分割在多张图片中
mHCont.ConvertImage(mUrl,Int32.Parse(textBox4.Text),mSaveTo,mFileName);


//所有网页生成在一张图片中
MSPlus.HtmlConvertImage mHCont = new MSPlus.HtmlConvertImage();
mHCont.ConvertImage(mUrl,mSaveTo,mFileName);


以下是分割后的效果

ATA0.PNG



ATA1.PNG



ATA2.PNG



HtmlConvertImage.Dll 使用说明

自定义长度的获取方式,文件将会自动切割.返回多张图片的文件名
public String[] ConvertImage(String mUrl, Int32 mPageLength, String mOutputDir, String mOutputFile)

网页保存为一张图片,图片的长度就是网页的长度.返回图片文件名
public String ConvertImage(String mUrl, String mOutputDir, String mOutputFile)

设置图片上的水印
public string MarkStr

随笔:因为项目的需要,当初是想从网上找个能完成Html2Image的工具,但找了半天只找到一家,而且还是要收费,并且没有DLL只是一个EXE应用程序(就是这家 http://www.sysimage.com/windows/html2image/default.aspx),无奈之下只能自行开发.目前实现的功能比较简单,等有空了在继续完善!哈哈


下载 HtmlConvertImage.RAR
posted @ 2005-07-09 22:23 Mack.Z 阅读(6514) | 评论 (50)编辑

2005年6月18日 #

     摘要: Gaia是一个主版頁面规划工具  GAIA(Master Page)可以讓您規劃出網站主體風格,使其他的內容頁面或是不同主題都擁有一致的外觀樣式。將來修改網站風格的時候,只需將Master Page換掉,就可以擁有一個全新風格的網站。GAIA V1.0 Beta(MASTERPAGE)下载地址: http://www.cnblogs.com/mack/articles/176872.html类文件...  阅读全文
posted @ 2005-06-18 21:22 Mack.Z 阅读(7730) | 评论 (16)编辑

2005年5月16日 #

     摘要: 自从装了MSN7之后就感觉他其中的Winks挺好玩的,但用来用去也就这么些。昨天晚上洗澡时就在想如果能DIY Winks的话,那到时挺好玩的。今天一早来公司,正事到先没干(哈,别想同事们看到了)。就先忙着研究Winks了。首先找到了MSN Winks的所在目录 一般也就是以下路径,中间的zhuguoping和3662667825会应登录帐户和环境而有所不同。C:\Documents and Set...  阅读全文
posted @ 2005-05-16 10:33 Mack.Z 阅读(6693) | 评论 (15)编辑

2005年3月5日 #

     摘要: <?xml version="1.0" encoding="utf-8" ?> <objects>     <description>An  example that demonstrates simple IoC features.</description> ...  阅读全文
posted @ 2005-03-05 00:45 Mack.Z 阅读(1993) | 评论 (0)编辑

2004年12月2日 #

     摘要: DatePickerV2.0 FreeVersion Build 1201 具有下功能: 支持多国语言(中,英,法) 支持AutoPostBack模式 可自定义边框,背景色,字体色等样式 支持VS.NET2003中的设计时模式 具有DateChanged事件 支持更多浏览器环境(PC (WinXP): Internet Explorer 4/5/5.5/6, Netscape 4.78/7, Mo...  阅读全文
posted @ 2004-12-02 01:16 Mack.Z 阅读(11723) | 评论 (45)编辑

2004年9月11日 #

     摘要: 2004-9-18 :菜单和工具条控件是支持跨越IFrame框架的,只是在上一版的示例包中没有加上这个功能的演示页,目前已更新过示例包有需要的朋友可以重新下载!2004-9-12 :修改了有些版本的VS.NET2003中无法将控件直接拖到设计视图的问题.MSPlus ToolBar & Menu FreeVersion 1.1.0910 新增以下功能:Office2003的样式风格 通过键...  阅读全文
posted @ 2004-09-11 22:14 Mack.Z 阅读(13231) | 评论 (85)编辑

2004年9月6日 #

     摘要: 2004-9-12 :修改了有些版本的VS.NET2003中无法将控件直接拖到设计视图的问题.2004-9-12: 修改了多个日期控件共存时,JS报错的问题2004-9-10:根据网友提出的建意增加了可以清空当前选中日期值的功能.2004-9-7:解决了JS脚本在UTF-8模式下出错的问题.警急通知:昨晚竟然上传了一个有问题的演示包上来!真是对不起大家.同时也感谢ideal网友提醒我.出错的地方如...  阅读全文
posted @ 2004-09-06 23:04 Mack.Z 阅读(11747) | 评论 (39)编辑

2004年9月2日 #

     摘要: 最近有些网友来问我为什么下载MSPLUS控件后,打开.Sln文件后,VS.NET提示目录不对的问题怎么解决?对于这个问题解决方法如下:下载MSPLUS控件后,里面有一个 SLN 为扩展名的文件(也就是解决方案文件).用记事本打开这个文件你会在最上面的部份看见这样一段内容:MicrosoftVisualStudioSolutionFile,FormatVersion8.00Project("{FAE...  阅读全文
posted @ 2004-09-02 09:35 Mack.Z 阅读(3779) | 评论 (5)编辑

2004年8月30日 #

     摘要: ToolBar & Menu 支持换皮,以下是VS.NET风格的运行时样式.同时也时支持VS.NET设计时.菜单层次支持无限层.呵呵支持XML数据源绑定,和直接在ASPX里增加子控件两种方法<msp:toolbarid="ToolBar1"runat="server"Width="450px"><msp:MenuItemID="MI1"Label=""LeftIcon="...  阅读全文
posted @ 2004-08-30 23:18 Mack.Z 阅读(3145) | 评论 (6)编辑

2004年8月23日 #

     摘要: Polaris网友的留言:本人在开发一个复合控件过程中存在一个问题,向您请教。某复合控件中包含一个ListBox服务器子控件,该子控件的数据是通过在Page_load中绑定上去的。整个控件呈现到客户端之后,通过客户端脚本对该ListBox子控件的项,进行了操作,例如删除、修改。但是当页面提交之后(通过Button),返回的结果中无法保存对ListBox处理的结果。 目前,我想让客户端处理的结果在页...  阅读全文
posted @ 2004-08-23 14:39 Mack.Z 阅读(1833) | 评论 (1)编辑

     摘要: 今天看见一个网友的留言:有一个问题请教一下兄台,对于继承自microsoft的.netframework中现有的组件,怎么将一些属性屏蔽掉,就是新的组件不提供继承来的属性,比如继承Panel新编写EPanel,对于panel的属性的BackColor怎么屏蔽掉?? 这个问题解决方法如下:第一步:在你的控件类中定义设计时中提供服务的类[Designer(typeof (MSPlus.Web.UI.D...  阅读全文
posted @ 2004-08-23 09:46 Mack.Z 阅读(3552) | 评论 (17)编辑

2004年8月21日 #

     摘要: 因为上次那个Demo中只写了一个自动托管分页的演示,但这种方法在大数据理时是行不通的,所以这几天有网友来信像我询问如何使用非托管的分页数据绑定模式。我今天早上写了一个非托管分页的演示(DataList1.aspx),有兴趣的朋友可以下载看一下。MSPlus DataList Control Free Version 1.1.0819 点此处进行下载这几天也有网友开始对我的作品进行攻击了,不管如何我...  阅读全文
posted @ 2004-08-21 11:19 Mack.Z 阅读(3298) | 评论 (6)编辑

2004年8月18日 #

     摘要: MSPlus DataList Control 下载地址http://www.cnblogs.com/Files/mack/DataListDemo.P.1.1.0819.rar这几天感觉累的很,今晚上死撑把这个DEMO作好了,别的功能介绍我先不多说了(要睡觉去了),今晚天气真是凉快,让我感觉到秋天来了(这是我最喜欢的季节!).这次发布的是个人版,功能上有所限制,但个人版是完全免费的.如在使用中有...  阅读全文
posted @ 2004-08-18 23:31 Mack.Z 阅读(3195) | 评论 (6)编辑

2004年8月15日 #

     摘要: MSPlusDropDownList 支持Vs.Net的Design Time属性和方法都于微软本身DropDownList相同,但 MSPlus DropDownList有更为漂亮的外观,并可换皮(目前提供三种XP风格)环境:在FrameWork 1.1 IE6.0版本上测试通过(Demo作的粗糙了些 )!如发现BUG请大家告诉我。谢谢注意:在2004-8-15 14:00 - 18:30分下载...  阅读全文
posted @ 2004-08-15 15:03 Mack.Z 阅读(3382) | 评论 (11)编辑

     摘要: 我在发布MSPLUS Demo的同时,也非常愿意将控件开发中的一些经验以及学习资料和大家一起分享。今天上传了一篇.NET Server Control开发入门级的文章,这篇文章真是写的很不错,强烈建议打算开发控件的朋友们花时间读一下(特别时那文章里的两张事件顺序图)。 当初我也是从阅读这篇文章开始起步的!文章地址:http://www.cnblogs.com/mack/articles/33467...  阅读全文
posted @ 2004-08-15 07:39 Mack.Z 阅读(2952) | 评论 (2)编辑

2004年8月13日 #

     摘要: 这是ToolBar控件,是不是和Vs.Net的工具条很像啊?!,但他是B/S结构的是MSPLUS控件集中的一个。如下:你可以直接写在标签里,来定义TOOLBAR和他的子项<cc1:MenuItemLabel="编辑项目"ID="X7"><cc1:MenuItemLabel="删除"ID="X10"LeftIcon="icon_delete"LeftIconOver="icon_d...  阅读全文
posted @ 2004-08-13 22:44 Mack.Z 阅读(2305) | 评论 (1)编辑

     摘要: 真是很出乎我的意料,我下午才开通的Blogs,晚上回家后就看到这么多留言,真是有点激动.为了不让大家失意,我先把控件的截图放上来让大家先看看。因为安装包的制作和代码的保护可能还需要一些时间。在这里我要声明一点,我是个人开发这套WebControl的,没有任何的商业目地。我的目标是希望改进目前的B/S软件的开发模式,减化软件开发的难度。对于这套DataList控件,用户只需要绑定数据源就能使用。Ex...  阅读全文
posted @ 2004-08-13 22:17 Mack.Z 阅读(3283) | 评论 (11)编辑

     摘要: 我是从2001起开始研发.NET控件,MSPLUS这套是2003年2月份开始开发的,在2003年底这套控件基本以开发的差不多了,因为一直找到不好的发布网站在加上那时正忙着换工作,所以一直把这事给耽搁了。目前我也正好相对较空,所以打算将这套控件发布出来,对于这套控件能顺利开发完成,在这里我要感谢以下几位。孙慧洁:感谢她一直鼓励我将这套控件开发完成。阿泰:我的好友,一起共事多年的同事,非常好的一个人,...  阅读全文
posted @ 2004-08-13 15:17 Mack.Z 阅读(3043) | 评论 (14)编辑