【问题标题】:Get the ".ascx" path of a User Control获取用户控件的“.ascx”路径
【发布时间】:2013-11-17 23:38:01
【问题描述】:

上下文:

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

也就是说,目前我的 Script 控件的使用方式如下(其中的 <script> 元素由 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 工作程序。)

【问题讨论】:

    标签: asp.net web-controls ascx


    【解决方案1】:

    嗯,这非常简单。我想它只会对带有 标记的控件有意义,但它似乎在这里工作得很好。

    Control.TemplateSourceDirectory 可以与Control.MapPathSecure 结合使用。

    文档中的示例是:

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

    【讨论】:

      猜你喜欢
      • 2017-09-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多