在 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") %>
怎么样?将 #
更改为 =
。
据我所知,<%# ... %>
更像是一种数据绑定语法。
我有一个 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") %>
怎么样?将 #
更改为 =
。
据我所知,<%# ... %>
更像是一种数据绑定语法。