Метка не существует в текущем контексте страницы asp.net и элемента управления ajax - PullRequest
0 голосов
/ 31 октября 2011

, прежде чем я начну, есть еще один вопрос с похожим названием, и он не решен, но моя ситуация несколько иная, так как я использую Ajax.

Недавно я добавил метку в свой элемент управления Ajax UpdateProgress, и по какой-то причине моя страница asp.net его не читает. Моя первоначальная цель состояла в том, чтобы текст метки постоянно обновлялся во время выполнения длинного метода. Я использую код позади, и я считаю, что метка объявлена. Я опубликую свою страницу .cs, если кто-то захочет прочитать ее (она не слишком длинная). Все остальные мои ярлыки работают отлично, и даже если я уберу ярлык ВНЕ элемента управления 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 ]

1 голос
/ 31 октября 2011

Если элемент управления объявлен в разметке, а выделенный код не распознает его, значит, ваш файл designer.cs, вероятно, не синхронизирован.Есть несколько способов исправить это:

  1. Закройте форму и снова откройте ее, удалите и добавьте lblProgress снова
  2. Добавьте метку в файл designer.cs вручную

Вот как добавить его вручную:

/// <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 control, в этом случае вам нужно будет сослаться на него, используя FindControl (например, @ Valeklosse ).

1 голос
/ 31 октября 2011

Если метка создается внутри элемента управления UpdateProgress, вам нужно будет сделать что-то вроде этого

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