大家好,我遇到了这个奇怪的问题,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"> Welcome owaisBhai
</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(" Welcome Guest <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(" Welcome {0} "
,SmartSession<User>.LiveSession.UserName);
loginViewBox.InnerHtml = WelcomeUser;
linkLogout.Text = "[LogOut]";
}
}
}
P.S:我想我已经很好地解释了情况让我知道任何细节。
答案 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
属性。尝试设置。