[英]Trying to change the text of a label that is inside the default login.aspx page in asp.net
我試圖更改在.net 4.0中創建新網站時給您的默認login.aspx頁面中創建的標簽的文本。 我似乎無法以任何方式訪問此標簽。 如果未批准用戶,則單擊“登錄”按鈕時,文本應該會更改。 這是制作標簽的地方。
<LayoutTemplate>
<span class="failureNotification">
<asp:Literal ID="FailureText" runat="server"></asp:Literal>
</span>
<asp:ValidationSummary ID="LoginUserValidationSummary" runat="server" CssClass="failureNotification"
ValidationGroup="LoginUserValidationGroup"/>
<%-- If the account is not approved display an error message --%>
<asp:Label ID="NotAproved" runat="server" CssClass="failureNotification"></asp:Label>......
我試圖通過使用FindControl來訪問它,但是它永遠無法正常工作,因此我可能做錯了什么。 預先感謝您的幫助。
編輯:我在后面的代碼中找到了訪問它的方法,以防萬一有人有類似的問題:
var notApproved = (Label)LoginUser.FindControl("NotApproved");
notApproved.Text = "Sorry Your Account has not yet Been Approved by an Administrator. Try Again Later.";
FindControl方法將僅找到作為您搜索容器的直接后代的服務器端控件(在這種情況下)。 從MSDN(我特別強調)-
使用FindControl可以從代碼隱藏頁中的函數訪問控件,可以訪問另一個容器內的控件,或者在其他情況下調用者無法直接訪問目標控件。 僅當控件直接包含在指定的容器中時,此方法才會找到該控件; 也就是說,該方法不會在控件內的整個控件層次結構中進行搜索。 有關如何在不知道控件的直接容器時查找控件的信息,請參見如何:按ID訪問服務器控件。
http://msdn.microsoft.com/en-us/library/486wc64h.aspx
通常,您應該避免使用FindControl並直接使用ID引用控件,以便返回強類型對象並避免對特定控件層次結構的嚴格依賴,但是對於您可能發現的模板中添加的控件,這是不可能的。
看來您是自己偶然發現或解決了直接后代要求,但我建議以下代碼可能更安全-
var notApproved = LoginUser.FindControl("NotApproved") as Label;
if (notApproved != null)
{
notApproved.Text = "Sorry Your Account has not yet Been Approved by an Administrator. Try Again Later.";
}
這處理了如果LoginUser.FindControl(“ NotApproved”)沒有找到任何東西並返回Null(請參見上面的MSDN鏈接),並且可能的類型轉換異常(如果找到的對象不是標簽,並且不能投到一個。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.