2

大家好,我遇到了这个奇怪的问题,asp:HyperLink控件没有在浏览器中呈现,它甚至不存在于发送到浏览器的最终 HTML 中。

Home.aspx Asp.net 标记

<div class="LoginBox">
    <div id="LoginViewBox" runat="server">
          <asp:HyperLink ID="linkLogout" runat="server" OnClick="LogOut"></asp:HyperLink>
    </div>
</div>

浏览器中的 Home.aspx

<div class="LoginBox">
  <div id="ctl00_HeadHolder_LoginViewBox">&nbsp;Welcome&nbsp;owaisBhai&nbsp;
  </div>
</div>

主页.aspx.cs

   protected void Page_Load(object sender, EventArgs e)
    {
       if(!IsPostBack)
       {
           LoginBoxManager.PopulateLoginBox(ref LoginViewBox, ref linkLogout);
       }
    }

登录框管理器.cs

    public static class LoginBoxManager
{
    public static void PopulateLoginBox(ref HtmlGenericControl loginViewBox, ref HyperLink linkLogout)
    {
        string LogInUrl = "Login.aspx";
        string WelcomeGuest = String.Format("&nbsp;Welcome Guest&nbsp;<a href='{0}'>[LogIn]</a>", LogInUrl);
        string WelcomeUser = "";

        if (HttpContext.Current.Session.Count == 0)
        {
            //user not authenticated
            loginViewBox.InnerHtml = WelcomeGuest;
        }
        else
        {
            //user authenticated
            WelcomeUser = 
            String.Format("&nbsp;Welcome&nbsp; {0}&nbsp;"
                                ,SmartSession<User>.LiveSession.UserName);
            loginViewBox.InnerHtml = WelcomeUser;
            linkLogout.Text = "[LogOut]";
        }
    }
}

PS:我想我已经很好地解释了情况,让我知道任何细节。

4

2 回答 2

2

您的代码正在用文本替换 asp:HyperLink。问题行是这一行:

loginViewBox.InnerHtml = WelcomeGuest;

通过设置 InnerHtml 属性,您将替换将出现在 LoginViewBox div 中的 HTML。

而不是这种方法,我建议在 div 中添加一个标签。这将为您提供以下最终结构:

<div id="LoginViewBox">
      <asp:Label ID="LoginLabel" runat="server"/>
      <asp:HyperLink ID="linkLogout" runat="server" OnClick="LogOut"></asp:HyperLink>
</div>

(自从我直接完成 ASP.NET 以来已经有一段时间了,所以标签控件可能需要更多的属性)。

于 2012-06-09T20:21:28.473 回答
1

您似乎没有在linkLogout.NavigateUrl任何地方设置该属性。尝试设置。

于 2012-06-09T20:19:58.843 回答