在 asp.net 中使用 <% ... %> where runat="server" (反之亦然)的解决方案
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 不为空,则用户已登录,其他方式则不是。如果您正在登录,它会将 ID 为 logout
的 a
-标签隐藏。
我的问题
现在这段代码将在第二行给出 NullReferenceException
。
Additional information: Object reference not set to an instance of an object.
如果我将 runat="server"
放在 a
标签中,它会给我这个:
Server Labels should not contain <% ... %>
-constructs.
在上面的代码中的 a
标签上添加了一个 <% ... %>
构造函数,用于获取正确的 url 以转到正确的页面。
这是我的问题。您不能在 runat="server"
所在的位置添加 <% ... %>
-构造函数。 怎样做才正确?
其他信息
可能还需要知道我的项目有子目录。例如,从 messages/inbox.aspx
到 user/profile.aspx
一定很重要。
上面的所有代码都添加到我用于所有页面的母版页。
谁能帮帮我?谢谢,抱歉我的英语不好。
有几种不同的 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>
您可以使用像 Panels or 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 是否适合您),但会让您能够访问代码隐藏中的控件更容易,例如:
if (Request.Cookies["user"] != null) // log in
{
logOut.Visible = false; // 2
}
else // log out
{
logIn.Visible = false; // 2
messages.Visible = false;
}
我的想法
当用户用他的头像点击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 不为空,则用户已登录,其他方式则不是。如果您正在登录,它会将 ID 为 logout
的 a
-标签隐藏。
我的问题
现在这段代码将在第二行给出 NullReferenceException
。
Additional information: Object reference not set to an instance of an object.
如果我将 runat="server"
放在 a
标签中,它会给我这个:
Server Labels should not contain
<% ... %>
-constructs.
在上面的代码中的 a
标签上添加了一个 <% ... %>
构造函数,用于获取正确的 url 以转到正确的页面。
这是我的问题。您不能在 runat="server"
所在的位置添加 <% ... %>
-构造函数。 怎样做才正确?
其他信息
可能还需要知道我的项目有子目录。例如,从 messages/inbox.aspx
到 user/profile.aspx
一定很重要。
上面的所有代码都添加到我用于所有页面的母版页。
谁能帮帮我?谢谢,抱歉我的英语不好。
有几种不同的 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>
您可以使用像 Panels or 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 是否适合您),但会让您能够访问代码隐藏中的控件更容易,例如:
if (Request.Cookies["user"] != null) // log in
{
logOut.Visible = false; // 2
}
else // log out
{
logIn.Visible = false; // 2
messages.Visible = false;
}