无法在aspx页面中使用c#访问asp标签属性

时间:2014-08-13 13:32:33

标签: c# asp.net

我试图从c#代码访问asp标签字段属性,它一直给我错误:

  

名称' lblTest'在当前背景下不存在。

在我的login.aspx页面上调用“验证电子邮件”时会发生这种情况。方法

没有关联的.cs文件,只有一个login.master页面。

我有业务请求要求我修改某些elses代码以进行增强,我猜这与现有的内容结构有关。

我已经尝试将它放在主文件中,在结构之外等等。仍然没有快乐。

以下是login.aspx代码:

    <%@ Page Language="C#" MasterPageFile="~/Masters/Login.master" AutoEventWireup="true" Culture="auto" UICulture="auto" EnableEventValidation="false" %>

<%@ Import Namespace="Internal.Platform.Diagnostics" %>
<%@ Import Namespace="Internal.Web" %>
<%@ Import Namespace="Internal.Trial" %>

<%@ Register Assembly="Internal.Web.Controls" Namespace="Internal.Web.Controls" TagPrefix="Internal" %>
<%@ Register Assembly="Internal.Web.Controls" Namespace="Internal.Web.Controls.ScriptResourceProvider" TagPrefix="Internal" %>
<%@ Register Assembly="Internal.Trial" Namespace="Internal.Trial" TagPrefix="InternalTrial" %>

<asp:Content ID="Content1" runat="server" ContentPlaceHolderID="ContentPlaceHolderArea">
    <script type="text/javascript">
    </script>
    <asp:Label ID="lblTest" runat="server"></asp:Label>
        <asp:Login ID="intLogin" runat="server" DestinationPageUrl="Default.aspx"
        OnPreRender="PreRender" Font-Names="Arial,Verdana,Sans-sarif" Font-Size="0.8em"
        ForeColor="#000000">
        <LayoutTemplate>
            <div id="logoContainer">
                <div class="logo"><img src="images/icons/logo.png" width="680" height="100"></div>
            </div>
            <div id="logonContainer">
                <div>
                    <div class="LoginBtn1" onclick="lgnUser('pam')">Admin - Pam</div>
                    <div class="User1"><img src="images/icons/user1.png" width="80" height="80"></div>
                    <div class="LoginBtn2" onclick="lgnUser('lee')">Sales - Lee</div>
                    <div class="User2"><img src="images/icons/user2.png" width="80" height="80"></div>
                </div>
                <div>
                    <div class="LoginBtn1" onclick="lgnUser('samantha')">Support - Samantha</div>
                    <div class="User1"><img src="images/icons/user3.png" width="80" height="80"></div>
                    <div class="LoginBtn2" onclick="lgnUser('larry')">Marketing - Larry</div>
                    <div class="User2"><img src="images/icons/user4.png" width="80" height="80"></div>
                </div>
            </div>

            <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>

<asp:Label runat="server" ID="lblTest"></asp:Label>

            <asp:CustomValidator ID="CustomValidator1" ControlToValidate="TextBox1"
                OnServerValidate="ValidateEmail" ValidationGroup="ValidateGp"
                ErrorMessage="This is a custom error validator" runat="server"/>

            <asp:Button ID="Button1" runat="server" Text="Button" ValidationGroup="ValidateGp"/>

            <%-- These are hidden controls used for the login process --%>
            <asp:TextBox ID="UserName" runat="server" style="display: none;"></asp:TextBox>
            <asp:CustomValidator ID="UserNameRequired" ValidateEmptyText="True" OnServerValidate="ValidateUserName"
                    ClientValidationFunction="" runat="server" ControlToValidate="UserName" ErrorMessage="<%$ resources: UserNameRequired %>"
                    ToolTip="<%$ resources: UserNameRequired %>" ValidationGroup="intLogin" Text="<%$ resources: asterisk %>"></asp:CustomValidator>
            <asp:TextBox ID="Password" runat="server" TextMode="Password" style="display: none;"></asp:TextBox>
            <asp:Button ID="btnLogin" runat="server" CommandName="Login" style="display: none;" ValidationGroup="intLogin" />
            <asp:Literal ID="FailureText" runat="server" EnableViewState="False"></asp:Literal>

        </LayoutTemplate>
    </asp:Login>    
</asp:Content>
<script type="text/C#" runat="server">
    private const string AuthError = "AuthError";

    protected override void OnInit(EventArgs e)
    {
        base.OnInit(e);
        EnsureChildControls();
    }


    protected new void PreRender(object sender, EventArgs e)
    {
        object msg = Internal.Platform.Application.ApplicationContext.Current.State[AuthError];
        if (msg == null)
        {
            var pageId = Internal.Platform.Application.ApplicationContext.Current.State["CurrentPageID"];
            var key = pageId + ":" + AuthError;
            msg = Internal.Platform.Application.ApplicationContext.Current.State[key];
        }
        if (msg != null)
        {
            Internal.Platform.Application.ApplicationContext.Current.State.Remove(AuthError);

            Literal FailureText = (Literal)intLogin.FindControl("FailureText");
            FailureText.Text = msg.ToString();
        }
    }

    private static void SetAuthError(string errorMsg)
    {
        if (!string.IsNullOrEmpty(errorMsg))
        {
            Internal.Platform.Application.ApplicationContext.Current.State[AuthError] = errorMsg;
        }
        else
        {
            Internal.Platform.Application.ApplicationContext.Current.State.Remove(AuthError);
        }
    }

    protected void ValidateUserName(object source, ServerValidateEventArgs args)
    {
        var oValidator = (CustomValidator)source;

        if (oValidator == null)
        {
            args.IsValid = false;
            SetAuthError(GetLocalResourceObject("InvalidUserNameValidation").ToString());
            return;
        }

        char cBadChar;
        BusinessRuleHelper.InvalidUserNameReason reason;

        if (BusinessRuleHelper.IsValidUserNameValue(args.Value, out reason, out cBadChar))
        {
            args.IsValid = true;
            SetAuthError(null);
        }
        else
        {
            args.IsValid = false;

            switch (reason)
            {
                case BusinessRuleHelper.InvalidUserNameReason.NullOrEmpty:
                case BusinessRuleHelper.InvalidUserNameReason.WhiteSpace:
                    oValidator.ErrorMessage = GetLocalResourceObject("UserNameRequired").ToString();
                    break;
                default:
                    oValidator.ErrorMessage = GetLocalResourceObject("intLoginResource1.FailureText").ToString();
                    break;
            }

            SetAuthError(oValidator.ErrorMessage);
        }
    }

    protected void ValidateEmail(object source, ServerValidateEventArgs args)
    {
    if (Internal.Trial.TrialLogin.VerifyEmail(args.Value.ToString()))
    {
        System.Web.UI.WebControls.Label lblTest = FindControl("lblTest") as System.Web.UI.WebControls.Label;
        lblTest.Text = "Test";
        args.IsValid = true;
    }
    }

    protected void Page_Error(Object sender, EventArgs e)
    {
        var userName = (TextBox)intLogin.Controls[0].FindControl("UserName");
        string usrnm = userName.Text;

        Exception err = Server.GetLastError();
        if (err is Internal.Platform.Application.ValidationException)
        {
            string errMsg = err.Message;
        }
    }

</script>

以下是login.master代码:

    <%@ Master Language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<script runat="server">
public void Page_Load(object sender, EventArgs e)
{
    if (Page.IsPostBack)
    {
        Internal.Platform.TimeZones tzs = new Internal.Platform.TimeZones();
        Internal.Platform.TimeZone tz = tzs.CurrentTimeZone;
        if (Request.Params["tz_info"] != null)
        {
            string[] tzinfo = Request.Params["tz_info"].Split(',');
            if (tzinfo.Length == 11)
            {
                tz = tzs.FindTimeZone(tzinfo[0], tzinfo[1], tzinfo[2], tzinfo[3], tzinfo[4], tzinfo[5], tzinfo[6], tzinfo[7], tzinfo[8], tzinfo[9], tzinfo[10]);
            }
        }
        else
        {
            log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
            log.Warn("TimeZone: Unable to get timezone from client, using server timezone.");
        }

        Internal.Platform.Application.IContextService context = Internal.Platform.Application.ApplicationContext.Current.Services.Get<Internal.Platform.Application.IContextService>(true);
        context.SetContext("TimeZone", tz);
    }
    Page.Title = GetLocalResourceObject("LoginPageTitle").ToString();
}

</script>

<script type="text/javascript">
    function internalCleanUrl(strUrl) {
        if(window.location.href.indexOf("internalclient") > -1) {
           strUrl = strUrl;
        } else {
           strUrl = "internalClient" + "/" + strUrl;
        }
        return strUrl;
    };
</script>


<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head2" runat="server">
    <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
    <title>Saleslogix</title>

    <link type="text/css" href="../css/internalBase.css" rel="stylesheet" />
    <link type="text/css" href="../css/BDLogin.css" rel="stylesheet" />
    <style type="text/css">
        body {
            background-color : #f1f1f1;
            background-image: none;
        }
    </style>
    <script pin="pin" type="text/javascript"> 
        var dojoConfig = {
            parseOnLoad: true,
            async: true,
            isDebug: false,
            locale: '<%= Global.Locale %>',
            paths: { 'Internal.: '../../../jscript/Internal. },
            deferredOnError: function (e) {
                if (dojo.config.isDebug) {
                }
            }
        };
    </script>
    <script pin="pin" type="text/javascript" src="javascript:internalCleanUrl("Libraries/dojo/dojo/dojo.js">)"</script>
</head>
<body>
    <script pin="pin" src="Libraries/jQuery/jquery.js" type="text/javascript"></script>
    <script pin="pin" src="jscript/BDLogin.js" type="text/javascript"></script>
    <script pin="pin" src="jscript/timezone.js" type="text/javascript"></script>
    <script pin="pin" src="jscript/Internal.platform/gears_init.js" type="text/javascript"></script>
    <form id="Form1" runat="server" method="post" >
        <div class="LoginArea" id="LoginContainer">
            <asp:ContentPlaceHolder ID="ContentPlaceHolderArea" runat="server"></asp:ContentPlaceHolder>
        </div>
    </form>
</body>
</html>

2 个答案:

答案 0 :(得分:0)

如果您有login.designer.cs文件,请尝试重新生成它(删除然后单击项目并选择&#39;转换为Web应用程序&#39;)。

答案 1 :(得分:0)

试试这个:

<%@ Page Language="C#" AutoEventWireup="true" %>
<%@ Import Namespace="System" %>
<%@ Import Namespace="System.Web" %>
<%@ Import Namespace="System.Web.UI" %>
<%@ Import Namespace="System.Web.UI.WebControls" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
    <script type="text/C#" runat="server">
        protected void btnTest_Click(object sender, EventArgs e)
        {
            System.Web.UI.WebControls.Label lblTest = FindControl("lblTest") as System.Web.UI.WebControls.Label;
            lblTest.Text = "Test";
        }
    </script>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:Label runat="server" ID="lblTest"></asp:Label>
        <asp:Button runat="server" ID="btnTest" OnClick="btnTest_Click" Text="test" />
    </div>
    </form>
</body>
</html>