编程开发 > ASP > 文章内容

一个“简单”的ASP.NET的服务器控件(三)

2010-10-25编辑:dan

我认为控件的文件的目录,应在两个方面可设置:

Absolute Path: C:\PublicData\ImageFiles\

Virtual Path: ~\xmlFiles\

我试着设计两个内置浏览来设置FilesDirectory属性。

以下为引用的内容:

[EditorAttribute(typeof(System.Web.UI.Design.UrlEditor), typeof(UITypeEditor))]

我没有使用UrlEditor,因为它不允许浏览外部站点的主目录。

以下为引用的内容:

[EditorAttribute(typeof(System.Windows.Forms.Design.FolderNameEditor), typeof(UITypeEditor))]

我没有使用FolderNameEditor,因为它没有提供虚拟路径的选择。此外,它迫使用户选择一个我不想选择文件。

要创建自定义服务器控件编辑器,就要创建一个类自UITypeEditor继承和覆盖两个功能。..其中一个启动一个DialogBox。

下面是代码:

以下为引用的内容:

using System;
using System.Collections.Generic;
using System.Drawing.Design;
using System.ComponentModel;
using System.Windows.Forms.Design;
using System.Text;

namespace EndWell
{
    class DualModeFolderEditor : UITypeEditor
    {
        // ---- GetEditStyle --------------------------------
        //
        // tell designer what kind of UI we are (Dropdown or Modal DialogBox)

        public override UITypeEditorEditStyle 
           GetEditStyle(ITypeDescriptorContext context)
        {
             return UITypeEditorEditStyle.Modal;
        }

        // ---- EditValue ----------------------------------------
        //
        // Called by IDE designer when user clicks the ... button
        // A DialogBox is launched

        public override object EditValue(ITypeDescriptorContext Context,
                                         IServiceProvider Provider,
                                         object Value)
        {           
            IWindowsFormsEditorService EditorService = null;
            if (Provider != null)
            {
                EditorService = (IWindowsFormsEditorService)
                   Provider.GetService(typeof(IWindowsFormsEditorService));
            }
            if (EditorService != null)
            {
                // launch the dialog box
                DuaModeFolderEditorForm Editor = 
                   new DuaModeFolderEditorForm(Value.ToString(), Context);
                
                EditorService.ShowDialog(Editor);
                return Editor.m_Value;
            }
            else
            {
                 return Value;
            }
        }
    }
}

以下是编辑的DialogBox,如下所示:

我将不会显示DialogBox代码,因为这是它比较长,涉及广。由于缺乏文档,在开发过程中进行了反复的试错。但也有一些利益的东西。..

目录分隔符(斜线):

反斜杠像 “\~”这样被使用的时候,GetProjectItemFromUrl 函数将不能正常使用。它正斜杠:“/~”能正常工作。因此,我确保所有的目录分隔符使用正斜杠。但是,从目录浏览器返回的目录使用的是反斜杠。所以我们要确保一致性。..虽然它使代码有点凌乱,但真的没有我更喜欢其他选择。

服务器控件开发提示:

一旦控件放置到页面上,你能自动的更新bin文件路径下面的DLL,通过右击右击控件,选择“Refresh”。我不得不删除从bin目录下的控件,然后重新添加到网页上,以获取最新版本到该项目中。

调试编辑器:

调试控件是非常容易的。调试控件的编辑器却非常的难。因为它运行在Visual Studio中。我在不同的地方添加下面代码:

System.Diagnostics.Debugger.Break();

当运行到断点,你得到下面这个令人爽快的画面:

点击 “Debug the program”,将创建一个新的 Visual Studio 实例。你就能够调试控件的编辑器了。原来的运行Visual Studio将锁定的(至少在我这里是这样的),你不得不去终止。由于欠缺自定义服务器控件编辑器的文档,这是非常宝贵的去寻找和了解什么被传递了,发生了什么。

可能的改进:

•标题字体可设置(大小,颜色,背景颜色。..)

•将名称放在一个固定的div中,文件列表在另一可调整大小或有scrollable的div中。

•添加一个布尔字段来选择显示在链接的文件扩展名。

希望这篇文章能够帮助你。

一个“简单”的ASP.NET的服务器控件(二)

热点推荐

登录注册
触屏版电脑版网站地图