簡體   English   中英

嘗試更改asp.net中默認login.aspx頁內的標簽文本

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM