获取用户控件的“.ascx”路径

时间:2013-11-17 23:38:02

标签: asp.net web-controls ascx

上下文:

我创建了一个自定义的“脚本”控件,我在几个用户控件中使用它们(这些都是通过ASCX路径加载的)。此脚本控件提供了一些有趣的功能,但我现在希望能够将ASCX标记的脚本 out 移动到与ASCX控件相同的目录中,然后动态加载此标记。 (我不能使用普通的<script>标签,因为脚本控件会创建一个特殊的绑定上下文,以便可以通过干净的API访问它。)

那,目前我的脚本控件就像(脚本控件使用里面的<script>元素一样使用,不应该与最终的HTML标记混淆):

<SmartScript runat="server">
  <script>/* the code here */</script>
</SmartScript>

但我希望它可以用作:

<SmartScript runat="server">
  <script src="~parent/theCode.js" />
</SmartScript>

但是,我想将“〜parent”扩展到ASCX控件的文件系统位置,以便我可以直接加载文件并将其用作渲染脚本的内容。

也就是说,给定基于ASCX的用户控件(可以通过Parent属性获取),如何确定容纳ASCX标记文件的系统路径?(并且,我应该注意什么警告?)

最好这是完整的路径,因为像~/_CONTROLTEMPLATES/prj/ctrl.ascx"这样的东西仍然会留下另一层重定向(~在这里意味着什么?)。

(应用程序运行时有足够的信任从文件系统读取,我正在避免使用嵌入式资源,因此我可以推送布局更改,而无需推送DLL并重新启动IIS工作程序。)

1 个答案:

答案 0 :(得分:5)

嗯,这简直太荒谬了。我想它只对带有标记的控件有意义,但它似乎在这里工作得很好。

Control.TemplateSourceDirectory可与Control.MapPathSecure一起使用。

文档中的示例是:

output.Write("The Actual Path of the virtual directory : " + MapPathSecure(TemplateSourceDirectory));