asp:HyperLink不在浏览器上呈现

时间:2012-06-09 20:08:12

标签: asp.net html visual-studio-2010 dom asp.net-webcontrol

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

Home.aspx Asp.net Markup

<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>

Home.Aspx.Cs

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

LoginBoxManager.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]";
        }
    }
}

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

2 个答案:

答案 0 :(得分: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,所以标签控件可能需要更多属性)。

答案 1 :(得分:1)

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