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

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

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  22 随笔 :: 42 文章 :: 931 评论 :: 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 阅读(6847) | 评论 (27)编辑

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 阅读(5150) | 评论 (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 阅读(3965) | 评论 (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 阅读(5349) | 评论 (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 阅读(6165) | 评论 (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 阅读(7595) | 评论 (16)编辑

2005年5月16日 #

自从装了MSN7之后就感觉他其中的Winks挺好玩的,但用来用去也就这么些。昨天晚上洗澡时就在想如果能DIY Winks的话,那到时挺好玩的。
今天一早来公司,正事到先没干(哈,别想同事们看到了)。就先忙着研究Winks了。

首先找到了MSN Winks的所在目录
一般也就是以下路径,中间的zhuguoping和3662667825会应登录帐户和环境而有所不同。
C:\Documents and Settings\zhuguoping\Application Data\Microsoft\MSN Messenger\3662667825\Winks3

打开这个目录后发现很多个dat文件,先用一个用二进制的编辑器先打开看看。发现原来是一个多文件合并后产生的文件,又看了一会,原来就是一个CAB打包文件。

大家可以直接将Dat改名为Cab后用Cab打包软件打开看看。
一般里面包含一个Swf和一个PNG以及一个Content.xml三个文件。

下面就来说说三个文件的作用。
Swf这个文件我就不多说了,一个Flash的文件。
PNG这个文件可以理解为Flash的缩略图文件。
Content.Xml就是含个Cab的定义和配置文件。

格式如下:

<?xml version="1.0" encoding="UTF-8" ?>
<package xmlns="http://messenger.msn.com/messengercontent/1.0" version="1.0" type="wink" xmlns:wink="http://messenger.msn.com/winks/1.0" wink:version="1.0" wink:name="Toasting Glasses" partnerid="AG">
 <item contentid="AGW3065297" contenttype="P" type="animation" mimetype="application/x-shockwave-flash" file="3065297f.swf" wink:sizex="640" wink:sizey="429" />
 <item type="thumbnail" mimetype="image/png" file="3065297m.png" />
</package>

微软的开发还是很规范的,从Xml节点定义的名称就基本能猜出是什么意义了。


先写到这吧,还有N多正事等在后面了,晚上再补充。有兴趣的朋友可以再仔细研究一下,用C#写个制作自定义的Winks应该不是太难。

posted @ 2005-05-16 10:33 Mack.Z 阅读(6609) | 评论 (15)编辑

2005年3月5日 #

<?xml version="1.0" encoding="utf-8" ?>
<objects>
    <description>An  example that demonstrates simple IoC features.</description>
    <object name="MyMovieLister" type="Spring.Examples.MovieFinder.MovieLister, MovieFinder">
        <property name="movieFinder">
            <ref local="AnotherMovieFinder" />
        </property>
    </object>
    <object name="MyMovieFinder" type="Spring.Examples.MovieFinder.SimpleMovieFinder, MovieFinder"></object>
    <!--
    An IMovieFinder implementation that uses a text file as it's movie source...
    -->
    <object name="AnotherMovieFinder" type="Spring.Examples.MovieFinder.ColonDelimitedMovieFinder, MovieFinder">
        <constructor-arg index="0">
            <value>movies.txt</value>
        </constructor-arg>
    </object>
</objects>

这是Spring Quick中的程序.这里的Object AnotherMovieFinder定义一个构造函数.并将这个值设为movies.txt
我的疑惑是.如果我需要在程序中把movies.txt改在test.txt的话.怎么实现呢?

下面还有一个类似的问题.前面是构造函数.以下是一个属性.同样我需要在程序中去修改Message
 <object id="TheAction" type="MSPlus.ClassLibrary.UpperAction, MSPlus.ClassLibrary">
  <property name="Message">
   <value>MYFirst</value>
  </property>
 </object>
并且我这里默认是Singleton模式.如果在程序中去修改Message的值后.再次从ObjectFactoy中获取对象时这个Message是显示的是Xml中默认定义的MYFirst值呢还是我在程序中修改后的新值?(我试了一下他还是会显示Xml中定义的值,但如何在Singleton模式下在以后获取这个对像时显示修改后的Message值的?)

请大家请教一下...
posted @ 2005-03-05 00:45 Mack.Z 阅读(1953) | 评论 (0)编辑

2004年12月2日 #



DatePickerV2.0 FreeVersion Build 1201 具有下功能:

  1. 支持多国语言(中,英,法)
  2. 支持AutoPostBack模式
  3. 可自定义边框,背景色,字体色等样式
  4. 支持VS.NET2003中的设计时模式
  5. 具有DateChanged事件
  6. 支持更多浏览器环境(PC (WinXP): Internet Explorer 4/5/5.5/6, Netscape 4.78/7, Mozilla Firefox 0.8, Opera 7)
  7. 支持更多浏览器环境(Mac (OS9): Internet Explorer 5.1, Netscape 7.1)
  8. 支持更多浏览器环境(Mac (OSX): Internet Explorer 5.2, Netscape 7.1,Safari 125)

下载免费的DatePicker V2.0.1201控件:

  1. 点这里开始下载 DatePickerV2.0.1201 


随笔:好久没来这里了,大概有三个月没来了吧.这里的变化真大.但人气还是这么的旺.很感谢DUDU给我们提供这样学习交流的平台.最近公司的项目实在太紧,所以搞的我连上Blog的时间都没了,更不要说去更新这些控件了.上周来看了一下.发现上次发布的日期控件问题还真不少.所以这次来发布一个新的版本,新版本中对大家所提出的一些问题和意见都基本得到了解决或改进.有兴趣的朋友可以下载用用,如果有问题请给我留言(我不能保证每一条留言都回复,但每一次我都认真的看过).新版的日期控件对于个人还是免费的.

posted @ 2004-12-02 01:16 Mack.Z 阅读(11494) | 评论 (44)编辑

2004年9月11日 #

2004-9-18 :菜单和工具条控件是支持跨越IFrame框架的,只是在上一版的示例包中没有加上这个功能的演示页,目前已更新过示例包有需要的朋友可以重新下载!

2004-9-12 :修改了有些版本的VS.NET2003中无法将控件直接拖到设计视图的问题.



MSPlus ToolBar & Menu FreeVersion 1.1.0910 新增以下功能:

  1. Office2003的样式风格
  2. 通过键盘快捷键触发菜单项
  3. 菜单可以设定为右键菜单
  4. 右键菜单可以于其它控件进行绑定
  5. 菜单项支持ToolTip提示
  6. 菜单不会被下拉框给档住!
  7. 在免费版中去除了1.1.0830版里令大家“讨厌”的对话框限制(目前功能上无任何限制)

原有功能:

  1. 无限层子菜单
  2. 支持XML文件绑定
  3. 支持XML流绑定
  4. 动态新增、修改、禁用、隐藏、删除菜单项
  5. 菜单点击后支持事件冒泡
  6. 菜单项可以设为客户端调用Javascript脚本
  7. Vs.Net 2003的样式风格
  8. 提升菜单工具条性能的开关(禁用ViewState)

常见问题的解决办法:

  1. 用VS.Net2003打开时提示目录出错(解决方法:修改解决方案文件中的IIS路径)

下载免费的ToolBar&Menu控件:

  1. 点这里开始下载 ToolBar&Menu V1.1.0910 


MSPlus ToolBar&Menu WebControl V1.1.0910版本开始所有的安程和示例程序都将告别以前那种简单的压缩包和粗糙的示例页面,迈出了正规化的第一步。
安程包将统一使用MIS安装包的形式进行发布。
控件的示例页面也将和一些正规控件公司的示例页面形式进行靠拢。
对于以前已发布的控件,我近期也将会重新整理和发布MIS包。
MSPlus WebControls 对于个人用户(非商业目地)来说将一如既往的免费、无限制的使用。

如果你在使用中发现问题请及时与我联系,如对控件的功能有需求的话也可来信告我!
MSPlus要走的路还很长,与目前出名的控件公司比起来差距是很大的。
一个人的能力必竟是有限的,如果在控件方面有兴趣合作的朋友或公司可来信或MSN与我联系,众人拾柴火焰高!同时大家对MSPlus在如何发展的问题上有什么好的建议请告诉我。
(MSN) msplus@gmail.com

posted @ 2004-09-11 22:14 Mack.Z 阅读(13001) | 评论 (85)编辑

2004年9月6日 #

2004-9-12 :修改了有些版本的VS.NET2003中无法将控件直接拖到设计视图的问题.
2004-9-12: 修改了多个日期控件共存时,JS报错的问题



2004-9-10:根据网友提出的建意增加了可以清空当前选中日期值的功能.


2004-9-7:解决了JS脚本在UTF-8模式下出错的问题.


警急通知:昨晚竟然上传了一个有问题的演示包上来! 真是对不起大家.同时也感谢ideal网友提醒我.

出错的地方如下(在三个ASPX文件的第一行):
<%@ Register TagPrefix="msp" Namespace="MSPlus.Web.UI.WebControls" Assembly="DatePicker" %>
将控件注册的Assembly改为以下
<%@ Register TagPrefix="msp" Namespace="MSPlus.Web.UI.WebControls" Assembly="MSPlus.DatePicker" %>

2004-9-6 23:00 - 2004-9-7 16:30 其间下载的DEMO包都有这个问题,目前我已将修改过的安装包上传了.
再次向所有以下载的用户表示歉意,对于以后的DEMO包上传我一定会认真检查!





支持VS.NET设计时,可自定义样式(边框背景等)

用户可自行设定日期显示和取值的格式(例如以下)
DatePicker.Format = “yyyy-mm-dd“; DatePicker.Format = “mm/dd/yyyy“;

支持AutoPostBack模式,当选择完日期后自动返回服务器端
DatePicker.AutoPostBack = true;

日期输入框可设置是否允许用户直接输入日期值
DatePicker.InputDisable = false;

当返回的日期值与前一次不同时,将会引发DateChange事件
private void InitializeComponent()
{    
    
this.DatePicker1.DateChanged += new System.EventHandler(this.DatePicker1_DateChanged);
    
this.Load += new System.EventHandler(this.Page_Load);

}

#endregion

private void DatePicker1_DateChanged(object sender, System.EventArgs e)
{
    Label1.Text 
= "DatePicker.DateChanged 事件被触发了!";
}

点这里下载 MSPlus DatePicker WebControl&Demo FreeVision 1.1.0906

微软WebControl中本身就有一个日期控件功能十分强大,但那个控件太过服务器端了,每次选择日期时总要不停的DoPostBack.这样一来会操成服务器端的性能下降,频繁的DoPostBack操作起来也不太方便.这个小控件正好能弥补微软日期控件的不足.
------------------------------------------------------
在开发中也遇到一个奇怪的问题,如果Web.Config中设置,如果globalization如果这个项为utf-8时Js文件会报错,我想可能是因为Js文件本身是Gb2312字符格式的问题.
    <!--  全球化 此节设置应用程序的全球化设置。-->
    
<globalization 
            
requestEncoding="utf-8" 
            responseEncoding
="utf-8"/>

但如果将globalization设置为gb2312模式就没有问题了
    <!--  全球化 此节设置应用程序的全球化设置。  -->
    
<globalization 
            
requestEncoding="gb2312" 
            responseEncoding
="gb2312" />

上周四买了两只小乌龟(一只绿的一只黑的)双休日的时间都花在逗小乌龟玩上了.呵呵.最近天也快凉了,正在考虑买加热棒还是让小乌龟自然冬眠,但那两只乌龟实在太小,我怕他们冬眠中会死掉...咳...

顺便贴张我那两只小乌龟的照片.嘿嘿.
http://www.cnblogs.com/mack/gallery/image/4478.aspx
posted @ 2004-09-06 23:04 Mack.Z 阅读(11345) | 评论 (39)编辑

2004年9月2日 #

最近有些网友来问我为什么下载MSPLUS控件后,打开.Sln文件后,VS.NET提示目录不对的问题怎么解决?

对于这个问题解决方法如下:

下载MSPLUS控件后,里面有一个 SLN 为扩展名的文件(也就是解决方案文件).
用记事本打开这个文件你会在最上面的部份看见这样一段内容:

Microsoft Visual Studio Solution File, Format Version 8.00
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ToolBarAndMenuDemo", "http://localhost:2000/ToolBarAndMenuDemo/ToolBarAndMenuDemo.csproj", "{7CAA01F4-91FB-425C-9317-F75EE0956623}"
    ProjectSection(ProjectDependencies) = postProject
    EndProjectSection
EndProject

所需要改动的是以下这句
"http://localhost:2000/ToolBarAndMenuDemo/ToolBarAndMenuDemo.csproj"

因为每个人IIS设置的不同,所以需要按你机器上的环境来配置这个URL地址.

例如:
如果你将下载的文件解压缩后放在 C:\Inetpub\wwwroot\ToolBarAndMenuDemo这个目录下.
打开IIS你会在默认Web站点下看见ToolBarAndMenuDemo这个虚拟目录.
右键点击这个目录,进入属性设置对话框.在应用程序设置下面的应用程序名,点击右边的创建按钮将其设为应用目录即可.
设置完成后将SLN文件中的以下这句
"http://localhost:2000/ToolBarAndMenuDemo/ToolBarAndMenuDemo.csproj"
改为
"http://localhost/ToolBarAndMenuDemo/ToolBarAndMenuDemo.csproj"
修改完后保存,然后你在用VS.NET打开SLN文件就行了.

如果你在使用中还有不明白的地方.也可以通过MSN与我交流.msplus@gmail.com (MSN)
这里再提配一下:在IIS中一定要将虚拟目录设置为应用目录!

对于以后控件的发布我也会注意这个问题,最近几天我也会将所有的控件打成MIS安装包的形式重新发布!

大家如果有更好解决这个问题的方法也告诉我一下吧.呵呵

posted @ 2004-09-02 09:35 Mack.Z 阅读(3743) | 评论 (5)编辑

2004年8月30日 #

ToolBar & Menu 支持换皮,以下是VS.NET风格的运行时样式.同时也时支持VS.NET设计时.

菜单层次支持无限层.呵呵



支持XML数据源绑定,和直接在ASPX里增加子控件两种方法

<msp:toolbar id="ToolBar1" runat="server" Width="450px">
    
<msp:MenuItem ID="MI1" Label="" LeftIcon="icon_listMembers" LeftIconOver="icon_listMembers_over">
        
<msp:MenuItem ID="MI11" Label="新建项目" LeftIcon="icon_copy" LeftIconOver="icon_copy_over"></msp:MenuItem>
    
</msp:MenuItem>
    
<msp:MenuItem ID="MI2" Label="" LeftIcon="icon_addNewItem" LeftIconOver="icon_addNewItem_over">
        
<msp:MenuItem ID="MI21" Label="添加新项" LeftIcon="icon_copy" LeftIconOver="icon_copy_over"></msp:MenuItem>
        
<msp:MenuItem ID="MI28" Label="-"></msp:MenuItem>
        
<msp:MenuItem ID="MI23" Label="添加 Web 功能">
            
<msp:MenuItem ID="MI231" Label="添加 Web 窗体" LeftIcon="icon_parameterInfo" LeftIconOver="icon_parameterInfo_over"></msp:MenuItem>
            
<msp:MenuItem ID="MI232" Label="添加 Web 用户控件" LeftIcon="icon_project" LeftIconOver="icon_project_over"></msp:MenuItem>
        
</msp:MenuItem>
        
<msp:MenuItem ID="MI26" Label="添加组件" LeftIcon="icon_parameterInfo" LeftIconOver="icon_parameterInfo_over"></msp:MenuItem>
    
</msp:MenuItem>
</msp:toolbar>

Xml绑定:
private void Page_Load(object sender, System.EventArgs e)
{
    
if(!this.IsPostBack)
    
{
        ToolBar1.DataSource 
= Server.MapPath("ToolBarXmlData.xml");
        ToolBar1.DataBind();
    }

}

支持菜单项被点击后的事件冒泡
同时也可以为每个菜单项增加点击后执行的客户端转跳的URL和JS.




支持动态的增加,删除,隐藏,禁用菜单项.

更多功能请下载控件使用DEMO,点此下载 MSPlus ToolBar&Menu WebControls

说到ASP.NET菜单控件,大家一定会想起国外专作菜单控件的ASPNEMENU公司,当我第一次看见ASPNETMENU时,当时还正在学习.NET,正好有个项目需要菜单控件,但那东西竟然要买$299美金,那时我就在想为什么我们中国人就没人去想到作一个呢,并且超越他比他作的更好呢?!

从那以后我就开始了控件开发,这次发布的ToolBar和Menu控件,虽然样式上没有ASPNETMENU丰富(目前只提供了一个Vs.Net风格的),但功能和性能上我个人认为应比他那个要强一些吧(起码ASPNETENU只支持XML绑定一种方式,他状态保持后的VIEWSTATE没处理好,导致页面上的ViewState值爆多一但子菜单一多性能上有影响).

还有一点就是MSPlus控件对国人来说个人版将是免费的!

MSPlus控件目前功能上可能还不是很完美,如果大家有好的提意或想法可以给我留言,我希望和大家一起进步.

上周在忙着帮一个朋友作一个项目,所以新控件的发布也停了一周.下次将发布TABControl.
posted @ 2004-08-30 23:18 Mack.Z 阅读(3110) | 评论 (6)编辑

2004年8月23日 #

Polaris网友的留言:本人在开发一个复合控件过程中存在一个问题,向您请教。某复合控件中包含一个ListBox服务器子控件,该子控件的数据是通过在Page_load中绑定上去的。整个控件呈现到客户端之后,通过客户端脚本对该ListBox子控件的项,进行了操作,例如删除、修改。但是当页面提交之后(通过Button),返回的结果中无法保存对ListBox处理的结果。
目前,我想让客户端处理的结果在页面提交之后,再次呈现在客户端时能够保存下来,不知道该如何处理?

今天又收到一个网友的留言,对于这个问题的解决办法如下:


复合控件中如何将客户端的处理结果通知服务器端的解决办法

posted @ 2004-08-23 14:39 Mack.Z 阅读(1812) | 评论 (1)编辑

今天看见一个网友的留言:
有一个问题请教一下兄台,对于继承自microsoft的.net framework中现有的组件,怎么将一些属性屏蔽掉,就是新的组件不提供继承来的属性,比如继承Panel新编写EPanel,对于panel的属性的BackColor怎么屏蔽掉??

这个问题解决方法如下:

第一步:在你的控件类中定义设计时中提供服务的类
[Designer(typeof (MSPlus.Web.UI.Design.WebControls.ButtonDesigner))]
    [Description( "MSPlus WebControl Button" )]
    [Designer(
typeof (MSPlus.Web.UI.Design.WebControls.ButtonDesigner))]
    
public sealed class Button: MSPlusWebControl, IPostBackEventHandler
    
{
}

第二步:新增一个设计时服务类,这个类继承 System.Web.UI.Design.ControlDesigner
第三步:重写PostFilterProperties()方法,

允许设计器从通过 TypeDescriptor 公开的属性集中更改或移除项。

/**
 *    命名空间:    MSPlus.Web.UI.Design.WebControls
 *    类:                ButtonDesigner
 * 
 *    作者:            Mack.Z
 *    完成日期:    2003-12-21    
 *    版权信息:    MSLULU (2000.10.10)
 *
*/


using System;
using System.ComponentModel;
using System.ComponentModel.Design;
using System.Collections;

namespace MSPlus.Web.UI.Design.WebControls
{
    
/// <summary>
    
/// ButtonDesigner 的摘要说明。
    
/// </summary>

    public class ButtonDesigner:System.Web.UI.Design.ControlDesigner
    
{
        
public ButtonDesigner()
        
{
            
//
            
// TODO: 在此处添加构造函数逻辑
            
//
        }


        
protected override void PostFilterProperties( IDictionary Properties )
        
{
            Properties.Remove( 
"Height" );
            Properties.Remove( 
"BackColor" );
            Properties.Remove( 
"BorderWidth" );
            Properties.Remove( 
"Font" );
            Properties.Remove( 
"ForeColor" );
            Properties.Remove( 
"TabIndex" );
            Properties.Remove( 
"ToolTip" );
            Properties.Remove( 
"Enabled" );
            Properties.Remove( 
"EnableViewState" );
        }


    }

}

注:这个方法只是屏蔽设计时的属性,但对于在代码文件通过智能提示的属性值是无法移除的(目前好像是没有办法作到)

如果大家有控件开发上的问题,也可以在我的主页上留言.

posted @ 2004-08-23 09:46 Mack.Z 阅读(3490) | 评论 (17)编辑

2004年8月21日 #

因为上次那个Demo中只写了一个自动托管分页的演示,但这种方法在大数据理时是行不通的,所以这几天有网友来信像我询问如何使用非托管的分页数据绑定模式。我今天早上写了一个非托管分页的演示(DataList1.aspx),有兴趣的朋友可以下载看一下。

MSPlus DataList Control Free Version 1.1.0819  点此处进行下载

这几天也有网友开始对我的作品进行攻击了,不管如何我还是会继续我的工作,也欢迎大家多提意见(毕竟我也不是什么高手,在.NET方面和这里的朋友比起来还有很大差距,我上传这些作品,并不是为了证明什么,我只是不希望自己在一个封闭的环境下一个人闷头开发)。

对于开源这件事,因为目前控件我还是一个一个的整理,文档也在一个个的写,我并没有说我不开放源码,但是对于大一堆注解不是很完整并没有帮助手册的源码就算开放出来也没有太大的意思。
很多工作是一步步作的,但源码我写完帮助和DEMO后是会公开的。

posted @ 2004-08-21 11:19 Mack.Z 阅读(3261) | 评论 (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 阅读(3174) | 评论 (6)编辑

2004年8月15日 #



MSPlus DropDownList 支持Vs.Net的Design Time

属性和方法都于微软本身DropDownList相同,但 MSPlus DropDownList有更为漂亮的外观,并可换皮(目前提供三种XP风格)

环境:在FrameWork 1.1 IE6.0版本上测试通过(Demo作的粗糙了些 )!如发现BUG请大家告诉我。谢谢

注意:在2004-8-15 14:00 - 18:30分下载的朋友们请重新一下载,有一个DLL我打错包了!

MSPlus DropDownList Control 点此处进行下载

明天就要上班了,可能更新的速度没这几天这么快了,毕竟在上班时作自己的事不太好。

随便问一下,有没有专门可以作帮助文档的工具(作出来的风格能和SDK相同的那种),有人知道的话告诉我个下载地址。谢谢。
posted @ 2004-08-15 15:03 Mack.Z 阅读(3332) | 评论 (11)编辑

我在发布MSPLUS Demo的同时,也非常愿意将控件开发中的一些经验以及学习资料和大家一起分享。

今天上传了一篇.NET Server Control开发入门级的文章,这篇文章真是写的很不错,强烈建议打算开发控件的朋友们花时间读一下(特别时那文章里的两张事件顺序图)。

               

当初我也是从阅读这篇文章开始起步的!

文章地址:http://www.cnblogs.com/mack/articles/33467.aspx
posted @ 2004-08-15 07:39 Mack.Z 阅读(2926) | 评论 (2)编辑

2004年8月13日 #



这是ToolBar控件,是不是和Vs.Net的工具条很像啊?!,但他是B/S结构的是MSPLUS控件集中的一个。

如下:你可以直接写在标签里,来定义TOOLBAR和他的子项
                <cc1:MenuItem Label="编辑项目" ID="X7">
                    
<cc1:MenuItem Label="删除" ID="X10" LeftIcon="icon_delete" LeftIconOver="icon_delete_over"></cc1:MenuItem>
                    
<cc1:MenuItem Image="gray"></cc1:MenuItem>
                    
<cc1:MenuItem Label="显示成员 " ID="X11" LeftIcon="icon_listMembers" LeftIconOver="icon_listMembers_over"
                        Disable
="true">
                        
<cc1:MenuItem Label="新建" ID="X12" LeftIcon="icon_new" LeftIconOver="icon_new_over"></cc1:MenuItem>
                        
<cc1:MenuItem Label="新建二" ID="X13" LeftIcon="icon_new" LeftIconOver="icon_new_over"></cc1:MenuItem>
                    
</cc1:MenuItem>
                
</cc1:MenuItem>

同时你也可你直接用DataTable或Xml进行绑定。
 
        protected MSPlus.Web.UI.WebControls.MSMenu MSMenu1;

        
private void Page_Load(object sender, System.EventArgs e)
        
{
            
// 在此处放置用户代码以初始化页面]
            MSMenu1.DataSource = Server.MapPath("NewMenuData.xml");
            MSMenu1.DataBind();

        }

<?xml version="1.0" encoding="utf-8"?>
<MSPlus>
    
<MenuConfig></MenuConfig>
    
<MenuData>
        
<MenuItem Label="File" ID="X1">
            
<MenuItem Label="New" ID="X2" LeftIcon="icon_new.gif" LeftIconOver="icon_new_over.gif"/>
            
<MenuItem Label="Open" LeftIcon="icon_open.gif" LeftIconOver="icon_open_over.gif">
                
<MenuItem Label="From Disk" ID="X3" LeftIcon="icon_new.gif" LeftIconOver="icon_new_over.gif"/>
            
</MenuItem>
        
</MenuItem>
        
<MenuItem Label="Edit" ID="X4">
            
<MenuItem Label="File" ID="X1"/>
            
<MenuItem Label="File" ID="X1"/>
            
<MenuItem Image="gray.gif"/>
            
<MenuItem Label="File" ID="X1"/>
            
<MenuItem Label="File" ID="X1">
            
<MenuItem Label="New" ID="X2" LeftIcon="icon_new.gif" LeftIconOver="icon_new_over.gif"/>
            
<MenuItem Label="Open" LeftIcon="icon_open.gif" LeftIconOver="icon_open_over.gif">
                
<MenuItem Label="From Disk" ID="X3" LeftIcon="icon_new.gif" LeftIconOver="icon_new_over.gif">
                    
<MenuItem Label="File" ID="X1">
            
<MenuItem Label="New" ID="X2" LeftIcon="icon_new.gif" LeftIconOver="icon_new_over.gif"/>
            
<MenuItem Label="Open" LeftIcon="icon_open.gif" LeftIconOver="icon_open_over.gif">
                
<MenuItem Label="From Disk" ID="X3" LeftIcon="icon_new.gif" LeftIconOver="icon_new_over.gif"/>
            
</MenuItem>
        
</MenuItem>
                
</MenuItem>
            
</MenuItem>
        
</MenuItem>
        
</MenuItem>
    
</MenuData>
</MSPlus>

他可以支持无限层。支持子控件的属性和状态的保存。你可以在运行时去动态的增加和删除子项或修改子项的属性。

子项的事件通过冒泡的方法一层层的像上传递,你只需增加一个Click事件就行!
        private void MSMenu1_MenuItemClick(object sender, MSPlus.Web.UI.WebControls.MenuItemClickEventArgs e)
        
{
            Response.Write(
"Click Item Label:" + e.EventItem.Label);
        }

今天正好是周未下班后去外面逛了逛,买了件白衬衫(我长的比较黑,但穿白色的到也挺神气的,呵呵)。逛的时间太长了,有点累了,过会还要看奥运的开幕式,实在没有体力再写下去了,关于ToolBar的更详细介绍我后要将继续写下去。

今天就先大概的介绍一个DataList和ToolBar,MSPlus中的其它控件我将在今后陆续的介绍给大家,希望大家能支持我!
posted @ 2004-08-13 22:44 Mack.Z 阅读(2275) | 评论 (1)编辑



真是很出乎我的意料,我下午才开通的Blogs,晚上回家后就看到这么多留言,真是有点激动.
为了不让大家失意,我先把控件的截图放上来让大家先看看。因为安装包的制作和代码的保护可能还需要一些时间。
在这里我要声明一点,我是个人开发这套WebControl的,没有任何的商业目地。我的目标是希望改进目前的B/S软件的开发模式,减化软件开发的难度。

对于这套DataList控件,用户只需要绑定数据源就能使用。
Example:

            <cc1:datalist id="DL1" Width="550px" Runat="Server" AllowSorting="True" PageSize="10" 
                  AllowPaging
="True" AllowCustomPaging="false" PrimaryFieldName="ColA">
                
<cc1:DataListColumn ColumnType="CheckBox"></cc1:DataListColumn>
                
<cc1:DataListColumn HeaderText="111" DataField="ColA" SortField="ColA" Width="150">
                   </
cc1:DataListColumn>
                
<cc1:DataListColumn HeaderText="222" DataField="ColB" Width="50"></cc1:DataListColumn>
                
<cc1:DataListColumn HeaderText="333" DataField="ColC" SortField="ColC" Width="300">
                  </
cc1:DataListColumn>
            
</cc1:datalist>

protected MSPlus.Web.UI.WebControls.DataList DL1;
  
private void Page_Load(object sender, System.EventArgs e)
  
{
   DataTable Dt 
= GetBindData();
   DL1.DataSource 
= Dt;
   DL1.DataBind();
  }


用户根本不需要去关心分页、排序、选中项的处理等。因为这些事件和功能都已整合在控件内部。你要作的只是绑定数据源!

MSPlus DataList控件,不是去继承微软本身体的DataGrid来开发的,因为去继承DataGrid然后只是去改Render的呈现来实现,这样的WebControl没有任何意义。MSPlus DataList直接从WebControl继承,内部Column和Item子控件的容器分别从CollectionBase类扩展开始的。所有性能和扩展性上将有很多好处。

本控件的Demo我目前正在寻找空间,我会尽快放上来的。同时也希望大家帮我一起测试,多提供宝贵意见。
我也非常希望和.NET开发的同行位一起交流一起进步!

posted @ 2004-08-13 22:17 Mack.Z 阅读(3146) | 评论 (11)编辑

我是从2001起开始研发.NET控件,MSPLUS这套是2003年2月份开始开发的,在2003年底这套控件基本以开发的差不多了,因为一直找到不好的发布网站在加上那时正忙着换工作,所以一直把这事给耽搁了。

目前我也正好相对较空,所以打算将这套控件发布出来,对于这套控件能顺利开发完成,在这里我要感谢以下几位。

孙慧洁:感谢她一直鼓励我将这套控件开发完成。

阿泰:我的好友,一起共事多年的同事,非常好的一个人,以前一起工作时经常传授我开发经验。这次他又帮了我一个大忙,把自己花费申请来的.NET空间给我使用。

史联:上海某科技公司的总经理,再和他一起工作的两年时间中从他身上学到好很多宝贵的开发经验和习惯。

Rick:我对影响深远的一个美国老头。

Erik.Arvidsson:JavaScript大师级人物,因为MSPLUS中应用到了很多客户端JS的程序,每当遇到问题时都是他帮助我一起解决。

 
posted @ 2004-08-13 15:17 Mack.Z 阅读(3018) | 评论 (14)编辑