[英]Solution for use <% … %> where runat=“server” (or vice versa) in asp.net
用户单击带有他的头像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,则表明用户正在登录,而其他方式则不是。 如果您是登录用户,则它将ID logout
a
-tag置于不可见状态。
现在,此代码将在第二行给出NullReferenceException
。
附加信息:对象引用未设置为对象的实例。
如果我把runat="server"
的a
标签都有效,它给我这个:
服务器标签不应包含
<% ... %>
-constructs。
在上面的代码a
-tag上添加了<% ... %>
-constructor,以获取正确的URL进入正确的页面。
这是我的问题。 您不能在runat="server"
所在的位置添加<% ... %>
-constructor。 您如何才能正确地做到这一点?
也许还重要的是要知道我的项目有子目录。 例如,从messages/inbox.aspx
转到user/profile.aspx
必须很重要。
上面所有这些代码都添加到了我用于所有页面的母版页中。
谁能帮我? 谢谢,抱歉我的英语不好。
除了使用普通a
-tags之外,还可以使用Panel或Hyperlinks之类的WebForm控件,例如:
<!--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中的控件,例如:
if (Request.Cookies["user"] != null) // log in
{
logOut.Visible = false; // 2
}
else // log out
{
logIn.Visible = false; // 2
messages.Visible = false;
}
ASP.net内联标签有几种不同的变体。 请在此处查看完整列表: https : //support.microsoft.com/en-us/kb/976112
并非所有人都支持将其放置在服务器端控件的标记的属性内。 <%# ... %>
数据绑定表达式内联格式将允许您执行此操作,而且我认为较旧的<% ... %>
格式也可以。 <%= ... %>
内联标签绝对不会在服务器端控件标签内起作用,因为整个表达式是直接编译的,而不是将内容显示为属性值。
如果您的主要目标是控制服务器端控件的可见性,那么您应该就可以设置control.Visible = false;
在您的后台代码中。 如果您想控制非服务器端控件(或控件块)的可见性,那么<asp:Panel>
服务器端控件可能是您的最佳选择。 ASP.net试图摆脱旧的ASP过多的内联方法。
我过去经常收到与您指定的错误类似的错误。 由于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>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.