当用户用他的头像点击a
标签时,他必须重定向到另一个页面。我使用第一个代码(见下文)。
<div>
<!--show new messages | only show when log in. -->
<a href="<%=ResolveUrl("~/messages/inbox.aspx") %>" class="click headeritem" id="messages">
<img src="<%=ResolveUrl("~/images/message.png") %>" alt="new messages" id="messages" />
<asp:Label class="number" id="lblNewMessages" runat="server">1</asp:Label>
</a>
<!--log in | only show when log out. -->
<div class="user" id="logOut" runat="server">
<a href="<%=ResolveUrl("~/gebruikers/aanmelden.aspx") %>" class="click" id="logIn">Log in</a>
<a href="<%=ResolveUrl("~/gebruikers/registreren.aspx") %>" class="click" id="regist" style="left:100px">Regist</a>
</div>
<!--go to the profile of the user | only show when log in. -->
<!--1-->
<a class="click user" id="logIn" href="<%=ResolveUrl("~/gebruiker.aspx") %>">
<img id="picture" src="<%=ResolveUrl("~/afbeeldingen/person-male.png") %>" alt="user" />
<asp:Label runat="server" id="points" class="points">10</asp:Label>
</a>
</div>
使用这个C#代码,我会根据登录或退出来放置一些不可见的标签。
if (Request.Cookies["user"] != null) // log in
{
FindControl("logOut").Visible = false; // 2
}
else // log out
{
FindControl("logIn").Visible = false; // 2
FindControl("messages").Visible = false;
}
有关代码的更多信息:如果您是登录,我会使用用户的ID放置一个cookie。如果cookie不为null,则用户登录,其他方式不是。如果您是登录信息,则会将标识为a
的{{1}} - 标记置于不可见状态。
现在,此代码将在第二行提供logout
。
附加信息:未将对象引用设置为对象的实例。
如果我将NullReferenceException
放在runat="server"
- 标签上,它就会给我这个:
服务器标签不应包含
a
- 构造。
上面的代码中的<% ... %>
标记上添加了<% ... %>
- 构造函数,以获取正确的网址以获取正确的网址。
这是我的问题。您无法在a
站点的位置添加<% ... %>
- 构造函数。 你怎么能以正确的方式做到这一点?
也许重要的是要知道我的项目有子目录。例如,从runat="server"
到messages/inbox.aspx
一定很重要。
以上所有代码都添加到我用于所有页面的母版页中。
任何人都可以帮助我吗?谢谢,抱歉我的英语不好。
答案 0 :(得分:2)
您可以使用Panels或Hyperlinks之类的WebForm控件,而不是使用简单a
- 标签,例如:
<!--log in | only show when log out. -->
<asp:Panel CssClass="user" id="logOut" runat="server">
<asp:HyperLink NavigateUrl="~/gebruikers/aanmelden.aspx" CssClass="click" id="logIn" Text="Log in" runat="server" />
<asp:HyperLink NavigateUrl="~/gebruikers/registreren.aspx" CssClass="click" id="regist" style="left:100px" Text="Regist" runat="server"/>
</asp:Panel>
这可能会减少您对生成的HTML的控制量(因此您必须检查HTML是否适合您),但是可以让您更轻松地访问Code中的控件,例如:< / p>
if (Request.Cookies["user"] != null) // log in
{
logOut.Visible = false; // 2
}
else // log out
{
logIn.Visible = false; // 2
messages.Visible = false;
}
答案 1 :(得分:1)
ASP.net内联标签有几种不同的类型。请在此处查看完整列表:https://support.microsoft.com/en-us/kb/976112
并非所有这些都支持在服务器端控件标记的属性中放置。 <%# ... %>
数据绑定表达式内联格式允许您这样做,我也认为较旧的<% ... %>
格式。 <%= ... %>
内联标记肯定不在服务器端控件标记内工作,因为整个表达式是直接编译的,而不是将内容显示为属性值。
如果您的主要目标是控制服务器端控件的可见性,那么您应该只能在代码隐藏中设置control.Visible = false;
。如果您想控制非服务器端控件(或控件块)的可见性,那么<asp:Panel>
服务器端控件可能是您的最佳路径。 ASP.net试图摆脱旧ASP的过度内联方法。
答案 2 :(得分:-1)
我曾经遇到类似你指定的错误。由于ResolveUrl
使用""
,因此请避免将其用于HREF
属性,因为它可能会破坏代码。请尝试以下代码:
<a href='<%=ResolveUrl("~/messages/inbox.aspx") %>' class="click headeritem" id="messages">
<img src="<%=ResolveUrl("~/images/message.png") %>" alt="new messages" id="messages" />
<asp:Label class="number" id="lblNewMessages" runat="server">1</asp:Label>
</a>