如何在标记上使用服务器端变量

时间:2013-08-02 22:43:15

标签: c# html asp.net .net user-controls

我想在标记上使用Session变量的值。这是在UserContorl.ascx上编写的代码,NavigateUrl上的文件我想发送存储在会话变量中的用户名。出于某种原因,我不想在PageLoad函数上设置NavigateUrl值。

  

请注意,代码会显示错误:服务器标记格式不正确。

<asp:Panel ID="pnlMenuItems" runat="server" HorizontalAlign="Left">
        <asp:HyperLink ID="LinkLogout" runat="server" NavigateUrl="~/logout/"+
            <%= HttpContext.Current.Session["UserName"].ToString(); %>> CssClass="pnlMenuItems"
            ForeColor="#666666">Logout</asp:HyperLink>
</asp:Panel>

2 个答案:

答案 0 :(得分:1)

您可以在服务器标记中绑定数据。 e.g。

<asp:HyperLink ID="LinkLogout" runat="server"
    NavigateUrl="<%# LogoutUrl %>"
    CssClass="pnlMenuItems"
    ForeColor="#666666">Logout</asp:HyperLink>

然后在你的代码中:

protected string LogoutUrl { 
    get { 
        return "~/logout/" + HttpContext.Current.Session["UserName"].ToString(); 
    }
}

protected void Page_Load(object sender, EventArgs e) {
    if(!IsPostBack) { DataBind(); }
}

使用此方法在DataBind()调用期间设置NavigateUrl。在我的示例中,值将在页面加载期间设置,但您不必专门执行此操作。如果您需要在页面生命周期的不同时间进行此操作,则可以尝试在其他活动期间调用DataBind()

答案 1 :(得分:0)

怎么样:

<asp:Panel ID="pnlMenuItems" runat="server" HorizontalAlign="Left">
        <asp:HyperLink ID="LinkLogout" runat="server"
            NavigateUrl="<%# "~/logout/" + HttpContext.Current.Session["UserName"].ToString() %>"
            CssClass="pnlMenuItems"
            ForeColor="#666666">Logout</asp:HyperLink>
</asp:Panel>