我希望将Date作为包含aspx的服务器可以访问的全局变量。我有一些主模板,但我希望页眉和页脚是一个服务器包含,所以我只有一个地方来更新链接,而不是在每个主人。在页脚中,我希望版权日期是动态的,并希望将其作为可在其他地方访问的全局变量。
我尝试将它放在母版页中,并且服务器包含在aspx中的服务器脚本中,但我还没有能够工作。我得到了变量在上下文中不存在的错误。我尝试声明并注册命名空间,但我一定做错了。
我想将主页面代码中的变量currentYear输入footer.aspx(include)。
母版页
<%@ Master Language="C#" AutoEventWireup="true" CodeBehind="OneColumn.master.cs" Inherits="Project.Masters.OneColumn" %>
<!DOCTYPE html>
<html>
<head id="oneColumnHead" runat="server">
<title></title>
</head>
<asp:ContentPlaceHolder ID="head" runat="server"></asp:ContentPlaceHolder>
</head>
<body>
<form id="oneColumnForm" runat="server">
<asp:ContentPlaceHolder ID="body" runat="server"></asp:ContentPlaceHolder>
</form>
<%-- Shared Footer --%>
<!-- #Include file="inc_footer.aspx" -->
</body>
</html>
主码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace Project.Masters
{
public partial class OneColumn : System.Web.UI.MasterPage
{
static int currentYear = DateTime.Now.Year;
protected void Page_Load(object sender, EventArgs e)
{
}
}
}
页脚Aspx
<div id="footer">Copyright © <%= currentYear %></div>
因此页脚只包含要包含的HTML。如何在页脚中注册该母版页?
编辑:好的,所以不可能。我正在尝试用户控制方法。这也不起作用。
这就是我所拥有的。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace Project.Masters
{
public partial class uc_footer : System.Web.UI.UserControl
{
static int currentYear = DateTime.Now.Year;
string dateYear = currentYear.ToString();
protected void Page_Load(object sender, EventArgs e)
{
}
}
}
ascx:
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="uc_footer.ascx.cs" Inherits="TeamWork.Masters.uc_footer" %>
<div id="footer">Copyright © <%= dateYear %></div>
它仍然说它在上下文中不存在。
答案 0 :(得分:1)
你可以这样做:
<%@ Master Language="C#" AutoEventWireup="true" CodeBehind="OneColumn.master.cs"
Inherits="Project.Masters.OneColumn" %>
<%@ Register TagPrefix="uc" TagName="footer" Src="~/PATHTOYOURCONTROL" %>
<!DOCTYPE html>
<html>
<head id="oneColumnHead" runat="server">
<title>Master page title</title>
</head>
<body>
<form id="oneColumnForm" runat="server">
<table>
<tr>
<td>
<asp:ContentPlaceHolder ID="head" runat="server">
</asp:ContentPlaceHolder>
</td>
</tr>
<tr>
<td>
<asp:ContentPlaceHolder ID="body" runat="server">
</asp:ContentPlaceHolder>
</td>
</tr>
<tr>
<td>
<uc:footer id="footer1" runat="server"/>
</td>
<tr>
</table>
</form>
</body>
</html>
您可以阅读更多here如何将控件添加到页面
答案 1 :(得分:0)
我之前已经回答了类似的问题:
VS 2005 fails to build aspx files with includes
服务器端包含由IIS而不是asp.net完成。因此,您尝试使用页脚的内容将在游戏中包含太晚以至于无法使用。 include不会对您文件中包含的控件或变量有所了解。
我建议使用用户控件以避免重复代码,如其他答案中所述。此外,如果您只想将其设置一次,您可能需要考虑将版权日期投放到web.config或静态应用程序范围的变量中。