[英]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.