如何在具有文件依赖性的类库中处理Web控件

时间:2011-09-01 11:38:58

标签: asp.net user-interface custom-controls class-library

如果可能,我可以做一点指导..

我正在构建一个包含自定义Web控件的类库。我已将许多jQuery UI元素转换为.NET类,以便在页面中动态使用。 e.g。

    Dim Msg As New Dialog("Dialog Title", New LiteralControl("Dialog Content"))
    Msg.Width.Value = 500
    Msg.Height.Value = 300
    Me.Controls.Add(Msg )

在CreateChildControls期间,必要的脚本会插入到头部,并且任何jQuery文件引用都会添加到头部,例如

    RegisterScriptFile("~/Scripts/jquery-1.5.1.js")
    RegisterScriptFile("~/Scripts/UI/jquery.ui.core.js")
    RegisterScriptFile("~/Scripts/UI/jquery.ui.widget.js")
    RegisterScriptFile("~/Scripts/UI/jquery.ui.mouse.js")
    RegisterScriptFile("~/Scripts/UI/jquery.ui.draggable.js")
    RegisterScriptFile("~/Scripts/UI/jquery.ui.position.js")
    RegisterScriptFile("~/Scripts/UI/jquery.ui.resizable.js")
    RegisterScriptFile("~/Scripts/UI/jquery.ui.dialog.js")

WebControl基类处理将引用插入到页眉中。

这很棒,但是存在问题......使用控制库的应用程序之间的文件路径可能不同。

我可以看到的选择是:

A)将文件作为资源嵌入库本身......但是CSS样式在各个应用程序之间是不可自定义的,并且对CSS / JS的任何更改都需要重新编译。

B)定义并使用标准化文件层次结构。每个需要文件夹的应用程序调用'Scripts',其中包含固定文件层次,因此控件知道在哪里引用所需文件。我在这里可以看到的问题是,可能并不总是可以使用这种标准化的层次结构,并且可能使图书馆使用繁琐。

C)为每个控件创建一个属性,用于它所需的每个文件。再次,这将变得麻烦并且使用起来很痛苦,因为每个实例化控件都必须设置这些属性。

D)创建一些ResourceUrlLibrary Dictionary,类似消费应用程序可以填充的类,然后在实例化时给每个控件。但是,这似乎令人费解,并可能导致其他开发人员混淆。

如果有人遇到过这个问题,可以给我一些很棒的指导:)

1 个答案:

答案 0 :(得分:1)

如果是自定义控件,它会引用Page类,然后调用ResolveClientUrl方法为您生成相对URL。这样就可以处理这种情况。您可能希望公开一个ScriptsFolder属性,该属性允许您存储脚本的路径,而不是硬编码。

如果这是针对您自己的自定义项目,则可以对文件夹进行标准化,但如果要创建要重用的公共库,则需要特定文件夹并不是一个好主意,然后您可以使用ScriptsFolder属性解决此问题,或将文件夹路径存储在配置中。标准化应用程序设置的使用是可以的。

为了确认,我使用了Telerik控件,他们选择了一个定义脚本自定义路径的属性的路径(因为它们依赖于一个特定控件),并且它们还具有一些可以被覆盖的设置通过添加应用程序设置。

HTH。