在 iframe 中包含的本地 ASP.NET 页面内使用服务器标记

Using server tags inside of a local ASP.NET page contained in an iframe

我有一个 class 可以根据文件的最后修改时间修改资源(例如,样式表)的路径。这是为了防止缓存过时的资源。

class 适用于所有“普通”页面,但我无法让它在 iframe 内呈现的本地 ASP.NET 页面中工作。 class 位于 ~/App_Code:

fingerprint.aspx.cs

public class Fingerprint {
    public static string Tag(string rootRelativePath) {
        if (HttpRuntime.Cache[rootRelativePath] == null) {
            string absolute = HostingEnvironment.MapPath(rootRelativePath);

            DateTime date = File.GetLastWriteTime(absolute);
            int index = rootRelativePath.LastIndexOf('/');

            string result = rootRelativePath.Insert(index, "/v-" + date.Ticks);
            HttpRuntime.Cache.Insert(rootRelativePath, result, new CacheDependency(absolute));
        }
        return HttpRuntime.Cache[rootRelativePath] as string;
    }
}

并且在大多数情况下,如果调用如下,它可以成功运行:

somepage.aspx

<%@ Page Language="C#" AutoEventWireup="true" Inherits="MainSite" CodeFile="somepage.aspx.cs" %>

<html>

<head runat="server">
    <title>Title</title>
    <link rel="stylesheet" href="<%# Fingerprint.Tag("/path/to/resource.css") %>">
    <!-- other markup -->
</head>
<body>
    <!-- other markup -->
</body>
</html>

但是如果我有一个 ASP.NET 页面在 iframe 中加载另一个 ASP.NET 页面,它似乎不会被调用。示例:

parent.aspx

<%@ Page Language="C#" AutoEventWireup="true" Inherits="MainSite" CodeFile="parent.aspx.cs" %>
<asp:Panel ID="Container" runat="server">
    <iframe id="testFrame" src="child.aspx"></iframe>
</asp:Panel>

child.aspx

<%@ Page Language="C#" AutoEventWireup="true" Inherits="MainSite" CodeFile="child.aspx.cs" %>
<html>

<head runat="server">
    <title>Title</title>
    <link rel="stylesheet" href="<%# Fingerprint.Tag("/path/to/resource.css") %>">
    <!-- other markup -->
</head>
<body>
    <!-- other markup -->
</body>
</html>

我没有收到任何错误,但 Fingerprint.Tag 似乎甚至没有被调用。我只是在 <link> 标记的 href 部分得到一个空字符串,我的样式表的路径通常是这样的。

是否有技巧可以让服务器标记在 iframe 中包含的本地 ASP.NET 页面内工作?我正在使用 ASP.NET WebForms(别无选择,客户要求)。

<%# Fingerprint.Tag("/path/to/resource.css") %> 更改为 <%=Fingerprint.Tag("/path/to/resource.css") %> 怎么样?将 # 更改为 =

据我所知,<%# ... %>更像是一种数据绑定语法。