.Net访问服务器中的全局变量包括在母版页中

时间:2012-03-15 14:33:15

标签: .net variables include master-pages

我希望将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>

它仍然说它在上下文中不存在。

2 个答案:

答案 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或静态应用程序范围的变量中。