标签在asp.net页面和ajax控件的当前上下文中不存在

时间:2011-10-31 16:29:02

标签: c# asp.net ajax visual-studio label

在我开始之前,还有另一个问题有一个类似的标题,它没有解决,但我的情况是非常不同的,因为我使用Ajax。

我最近在我的Ajax UpdateProgress控件中添加了一个标签,由于某种原因,我的asp.net页面没有读取它。我最初的目标是在长方法运行时不断更新标签文本。我正在使用代码,我相信标签已声明。我会发布我的.cs页面,如果有人想通读它(它不会太长),所有我的其他标签工作完美,即使我采取标签OUT的ajax控件它将工作正常(不是文本更新虽然)。我需要使用某个Ajax标签吗?

我很困惑为什么会发生错误。确切的错误消息指出:“当前上下文中不存在名称'lblProgress'。我使用c#,ajax控件,asp.net页面和visual studio。此程序将文件上传到客户端并将信息存储在如果有人可以提供帮助,我会非常感激。提前致谢!

    using System;
using System.Data;
using System.Collections.Generic;
using System.Linq;
using System.IO;
using System.Net;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Configuration;
using System.Threading;


public partial class SendOrders : System.Web.UI.Page
{
protected enum EDIType
{
    Notes,
    Details
}

protected static string NextBatchNum = "1";
protected static string FileNamePrefix = "";
protected static string OverBatchLimitStr = "Batch file limit has been reached.  No more batches can be processed today.";

protected void Page_Load(object sender, EventArgs e)
{
    Initialize();
}
protected void Page_PreRender(object sender, EventArgs e)
{
}
protected void Button_Click(object sender, EventArgs e)
{
    PutFTPButton.Enabled = false;
    lblProgress.Visible = true;
    lblProgress.Text = "Preparing System Checks...";
    Thread.Sleep(3000);
    Button btn = (Button)sender;
    KaplanFTP.BatchFiles bf = new KaplanFTP.BatchFiles();
    KaplanFTP.Transmit transmit = new KaplanFTP.Transmit();

    if (btn.ID == PutFTPButton.ID)
    {
        lblProgress.Text = "Locating Files...";
        //bf.ReadyFilesForTransmission();
        DirectoryInfo dir = new DirectoryInfo(@"C:\Kaplan");
        FileInfo[] BatchFiles = bf.GetBatchFiles(dir);
        bool result = transmit.UploadBatchFilesToFTP(BatchFiles);
        lblProgress.Text = "Sending Files to Kaplan...";
        if (!result)
        {
            ErrorLabel.Text += KaplanFTP.errorMsg;
            return;
        }
        bf.InsertBatchDataIntoDatabase("CTL");
        bf.InsertBatchDataIntoDatabase("HDR");
        bf.InsertBatchDataIntoDatabase("DET");
        bf.InsertBatchDataIntoDatabase("NTS");
        List<FileInfo> allfiles = BatchFiles.ToList<FileInfo>();
        allfiles.AddRange(dir.GetFiles("*.txt"));
        bf.MoveFiles(allfiles);
        lblProgress.Text = "Uploading File Info to Database...";
        foreach (string order in bf.OrdersSent)
        {
            OrdersSentDiv.Controls.Add(new LiteralControl(order + "<br />"));
        }
        OrdersSentDiv.Visible = true;
        OrdersInfoDiv.Visible = false;
        SuccessLabel.Visible = true;
        NoBatchesToProcessLbl.Visible = true;
        BatchesToProcessLbl.Visible = false;
        PutFTPButton.Enabled = false;
        BatchesCreatedLbl.Text = int.Parse(NextBatchNum).ToString();
        Thread.Sleep(20000);

        if (KaplanFTP.errorMsg.Length != 0)
        {
            ErrorLabel.Visible = true;
            SuccessLabel.Visible = false;
            ErrorLabel.Text = KaplanFTP.errorMsg;
        }
    }
}

这也是我的aspx代码。

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="SendOrders.aspx.cs" Inherits="SendOrders" %>

<!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 id="Head1" runat="server">
   <title>Kaplan EDI Manager</title>
    <link href="css/style.css" rel="stylesheet" type="text/css" />
    <style type="text/css">
        .style1
        {
            width: 220px;
            height: 19px;
        }
    </style>
</head>
<body>
    <form id="form1" runat="server">
    <div class="mainPanel">
        <div>
            <h3>Number of Batches Created Today: <asp:Label runat="server" style="display:inline;" ID="BatchesCreatedLbl"></asp:Label>
                <asp:ScriptManager ID="ScriptManager1" runat="server">
                </asp:ScriptManager>
                <span class="red">COUNTDOWN TO SUBMISSION!</span>
                <span id="timespan" class="red"></span>
            </h3>
        </div>
        <div id="batchestoprocessdiv">
        </div>

        </asp:UpdatePanel>
        <asp:UpdatePanel ID="UpdatePanel1" runat="server">
            <ContentTemplate>
                <asp:Label ID="BatchesToProcessLbl" runat="server" CssClass="green" 
                    Height="22px" Text="THERE IS AN ORDER BATCH TO PROCESS."></asp:Label>
                <asp:Label ID="NoBatchesToProcessLbl" runat="server" CssClass="red" 
                    Text="There are no Order Batches to Process." Visible="false"></asp:Label>
                <asp:Button ID="PutFTPButton" runat="server" onclick="Button_Click" 
                    Text="Submit Orders" />
                <asp:Label ID="SuccessLabel" runat="server" CssClass="green" 
                    Text="Batch has been processed and uploaded successfully." Visible="false"></asp:Label>
                <asp:Label ID="ErrorLabel" runat="server" CssClass="red" Text="Error: " 
                    Visible="false"></asp:Label>
                <asp:Label ID="lblProgress" runat="server" CssClass="green" Height="16px" 
                    Text="Label" Visible="False"></asp:Label>
                <br />
            </ContentTemplate>
        </asp:UpdatePanel>
        <asp:UpdateProgress ID="UpdateProgress1" runat="server" 
            AssociatedUpdatePanelID="UpdatePanel1">
            <ProgressTemplate>
                <br />
                <img alt="" class="style1" src="images/ajax-loader.gif" />
            </ProgressTemplate>
        </asp:UpdateProgress>
    </div>
    <div id="OrdersInfoDiv" runat="server" visible="false">
        <asp:GridView ID="BatchDetails" Caption="Details of orders ready to be sent" runat="server" AutoGenerateColumns="true" 
        CssClass="InfoTable" AlternatingRowStyle-CssClass="InfoTableAlternateRow" >
        </asp:GridView>
    </div>
    <div id="OrdersSentDiv" class="mainPanel" runat="server" visible="false">
        <h4>Sent Orders</h4>
    </div>
    </form>
    <script src="js/SendOrders.js" type="text/javascript"></script>
</body>
</html>

2 个答案:

答案 0 :(得分:1)

如果在UpdateProgress控件中创建了Label,那么您将需要执行类似这样的操作

((Label)upUpdateProgress.FindControl("lblProgress")).Text = "Uploading File...";

答案 1 :(得分:1)

如果在标记中声明控件并且代码隐藏无法识别它,那么您的designer.cs文件可能不同步。有几种方法可以解决这个问题:

  1. 关闭表单并重新打开,然后删除并再次添加lblProgress
  2. 手动将标签添加到designer.cs文件
  3. 以下是手动添加的方法:

    /// <summary>
    /// lblProgress control.
    /// </summary>
    /// <remarks>
    /// Auto-generated field.
    /// To modify move field declaration from designer file to code-behind file.
    /// </remarks>
    protected global::System.Web.UI.WebControls.Label lblProgress;
    

    修改

    注意到您将UpdatePanel放在UpdateProgress控件中,在这种情况下,您需要使用FindControl(如 @Valeklosse )引用它