繁体   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