【问题标题】:Inline Expression <%= %> in html attributehtml 属性中的内联表达式 <%= %>
【发布时间】:2019-08-19 19:14:46
【问题描述】:

我正在尝试为一个项目实现一个简单的缓存解决方法。

在项目中我有一个公共字符串:

public string noCache = DateTime.Now.Second.ToString();

我试图在 css 引用的末尾引入它,以防止拉取缓存版本。

<link rel="stylesheet" href="./css/core.css?version=<%= noCache%>">

这将使 url "./css/core.css?version=" 文字而不是插入变量。经过一番阅读,我发现.net 不支持内联表达式。奇怪的是,在我发现我这样做之前:

<link rel="stylesheet" href="./css/core.css?version=<%= noCache%>"  <%= noCache%> />

无论出于何种原因,当我使用它时它都会起作用。有人可以向我解释为什么以及如何最好在没有奇怪的解决方法的情况下设置这样的东西。

AppSite.Master:

<%@ Master Language="C#" AutoEventWireup="true" CodeBehind="AppSite.master.cs" Inherits="APP_Partnership.AppSite" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title><%# noCache%></title>

    <link runat="server" id="CSS1" rel="stylesheet" href="<%= noCache%>"/>
    <asp:ContentPlaceHolder ID="head" runat="server">
    </asp:ContentPlaceHolder>

</head>
<body>
    <form id="form1" runat="server">
    <div class="container">
        <div class="header">
            APP SITE
        </div>
        <div class="content">
            <asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server">

            </asp:ContentPlaceHolder>
        </div>
    </div>
    </form>
</body>
</html>

AppSite.Master.cs:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace APP_Partnership
{
    public partial class AppSite : System.Web.UI.MasterPage
    {

        public string noCache = DateTime.Now.Second.ToString();

        protected void Page_Load(object sender, EventArgs e)
        {


        }

    }

}

【问题讨论】:

  • Inline Expressions 在 ASP.NET WebForm 中支持,但是它应该放在 aspx/ascx 文件中以便评估和执行。将其放入 CSS 文件不会产生任何效果。
  • @abatishchev 这是在 AppSite.Master 页面中。这不在 css 文件中,而是使用可变尾字符串引用 css 文件以防止缓存。
  • 请提供您的母版页的完整代码
  • @abatishchev 我已经更新了 Site.Master 和背后的代码
  • 如果您不需要从后面的代码访问链接,请删除runat="server"。如果您这样做,请使用databinding expression

标签: c# asp.net .net webforms


【解决方案1】:

我会使用 UserControl 来做到这一点。 这里是usercontrol ascx页面的代码:

<%@ Control Language="C#" AutoEventWireup="true" CodeFile="CacheControl.ascx.cs" Inherits="Usercontrols_CacheControl" %>
<link rel="stylesheet" href="./css/core.css?version=<%= noCache%>">

文件背后的代码:

protected string noCache = DateTime.Now.Second.ToString();
protected void Page_Load(object sender, EventArgs e)
{

}

添加到母版页:

<%@ Register TagPrefix="MyTagName" TagName="CacheControl" Src="~/Usercontrols/CacheControl.ascx" %>

在头部:

<MyTagName:CacheControl ID="CacheControl"  runat="server" />

页眉中的页面输出如下所示:

<link rel="stylesheet" href="./css/core.css?version=3">

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-24
    • 1970-01-01
    • 1970-01-01
    • 2010-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-29
    相关资源
    最近更新 更多