Обновление текста метки во время работы метода - PullRequest
1 голос
/ 11 июня 2009

Развитие - это больше хобби на данный момент; поэтому извиняюсь, если это основной вопрос, хотя после нескольких часов поиска в Интернете я не могу найти ответ. В настоящее время я создаю инструмент поддержки для моей команды, который выполняет ряд SQL-запросов и процессов BCP и возвращает результаты. Некоторые из этих действий занимают довольно много времени, и я хотел бы обновить веб-интерфейс сообщениями о состоянии. Ранее я использовал Label1.Text = text;

Однако теперь я хотел бы обновить Label1.text несколько раз, когда мой метод работает. Попробуйте, как я мог бы, хотя он отображает только последнее обновление в методе.

Я написал небольшой тест, чтобы попытаться разобраться в этом: -

Веб-страница

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="Template._Default" %>

<!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>Untitled Page</title>


</head>
<body>
<form id="form1" runat="server">
<div>
    <asp:Label ID="progress" runat="server" Text=""></asp:Label><br />
    <asp:Image ID="Image1" runat="server" ImageUrl="~/Image/loader.gif" 
        Visible="False" />
</div>
</form>
</body>
</html>

C # CodeBehind

using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Data.Odbc;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;

namespace Template
{
public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        uiUpdate("OUT", 1);           
        wait();
        uiUpdate("In", 0);
    }

    protected void uiUpdate(string text, Int32 image)
    {                      
        if (image == 1)
        {
            Image1.Visible = true;                                             
        }
        else
        {
            Image1.Visible = false;
        }
        progress.Text = text;

    }

    protected void wait()
    {
        DateTime wait;
        wait = DateTime.Now + TimeSpan.FromSeconds(10);
        while (wait > DateTime.Now)
        {
        }
    }

Есть ли способ заставить Label1 & Image обновляться при запуске Page_load?

Или я смотрю на это совершенно неправильно (без сомнения!)

Спасибо

Ответы [ 2 ]

2 голосов
/ 11 июня 2009

HTML как полный запрос страницы не является ни в малейшей степени гранулярным:

  • ваш браузер отправляет запрос (всех переменных формы, файлов cookie и т. Д.) На сервер
  • сервер выполняет небольшую обработку и отправляет ответ (обычно html)
  • Ваш браузер обрабатывает ответ и отображает экран

Все ваши обновления происходят в середине списка, так что нет: невозможно обновить браузер: ваш код выполняется на сервере, без диалога с клиентом

Если вам нужен такой тип поведения, вам придется взглянуть на инструменты AJAX - на каждом шаге выполняется «достаточно» работа, чтобы перейти к следующему этапу и обновить заголовок ... с обычным ASP.NET UpdatePanel может представлять интерес; для MVC или других (не-ASP.NET) установок jQuery будет вашим другом. К сожалению, это не тривиальная тема.

1 голос
/ 11 июня 2009

Если я правильно понимаю ваш вопрос, вы не можете сделать это на обычном asp.net, вам нужно использовать ajax и создать метод ajax, в котором вы затем обновите текст метки во время выполнения. Вы можете использовать скрипт-менеджер ajax MS для этого. Если это не для высокой производительности, вы можете использовать панель обновления , в противном случае вы должны просто использовать скрипт-менеджер самостоятельно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...