2014-01-15 3 views
1

У меня действительно большая страница, на которую требуется некоторое время, чтобы вытащить данные и загрузить их. Когда вы сначала переходите на страницу .aspx, я бы хотел, чтобы у него было хорошее загружаемое изображение .png, чтобы люди не закрывали окно перед его отображением. Я пробовал помещать asp: UpdateProgress, но это никогда не появляется до тех пор, пока страница не загрузится, и я ничего не сделаю на странице. Как загрузить экран загрузки до загрузки остальной страницы? Ниже я пытаюсь, чтобы это не сработало.Загрузка окна на странице Загрузка asp: UpdateProgress

<asp:ScriptManager ID="ScriptManager1" runat="server"> 
</asp:ScriptManager> 
<asp:UpdateProgress ID="UpdateProgress1" runat="server" DisplayAfter="10"> 
     <ProgressTemplate> 
      <div id="updatestatus" class="shadow"> 
      <asp:Label ID="Label12" runat="server" Text="Loading..."> 
      </asp:Label> 
      <asp:Image ID="Image1" 
      runat="server" ImageUrl="~/images/1status.png" /> 
      </div> 
     </ProgressTemplate> 
</asp:UpdateProgress> 
<asp:UpdatePanel ID="UpdatePanel1" runat="server"> 
     <ContentTemplate> 
     <%-- My page loading stuff --> 
     </ContentTemplate> 
</asp:UpdatePanel> 

Я также пробовал с таймером. Здесь это становится интересным. Ярлыки внутри ContentTemplate отображаются на галочке. В GridView I в шаблоне контента нет.

<asp:ScriptManager ID="ScriptManager1" runat="server" /> 
    <asp:Image ID="Image1" runat="server" ImageUrl="~/images/1status.png" /> 
    <asp:UpdatePanel ID="UpdatePanel1" runat="server" Visible="false"> 
     <ContentTemplate> 
      <!-- My page loading stuff --> 
     </ContentTemplate> 
    </asp:UpdatePanel> 
    <asp:Timer ID="Timer1" runat="server" Interval="600" OnTick="Timer1_Tick"></asp:Timer> 


protected void Timer1_Tick(object sender, EventArgs e) 
{ 
UpdatePanel1.Visible = true; 
Timer1.Enabled = false; 
Image1.Visible = false; 
} 

Я даже пытался вынимая UpdatePanel полностью и только изменяя GridView видимое состояние на таймере, и что до сих пор не работает. Сетка не появляется.

Что интересно, если я поставить кнопку на странице, которая выполняет следующие действия,

protected void ButtonHide_Click(object sender, EventArgs e) 
{ 
     if (GridView1.Visible) 
     { 
      GridView1.Visible = false; 
     } 
     else 
     { 
      GridView1.Visible = true; 
     } 

} 

я могу нажать ее и скрыть и показать GridView столько раз, сколько я хочу без проблем. Почему таймер отличается от других?

ответ

0

В коде .aspx я установил таймер, TimerRefresh, но не выключайте его. Затем, когда страница начинает загружаться, если это не PostBack (первый раз), я включаю TimerRefresh. Он сразу же клеится. Это вызывает перезагрузку страницы, которая будет PostBack. Это вызывает UpdateProgress1. PageLoad() ничего не сделает, потому что это PostBack. TimerRefresh_Tick(object sender, Eventargs e) срабатывает, потому что это было вызвано таймером. Это заставляет его отключать таймер от запуска снова и загружает страницу с данными. Как только он будет завершен, UpdateProgress1 уходит.

В Page_Load()

if (!IsPostBack) 
{ 
TimerRefresh.Enabled = true; 
} 

В TimerRefresh_Tick(object sender, EventArgs e)

TimerRefresh.Enabled = false; 
codeToLoadDate(); 

.aspx

<asp:ScriptManager ID="ScriptManager1" runat="server"> 
</asp:ScriptManager> 
<asp:UpdateProgress ID="UpdateProgress1" runat="server" DisplayAfter="10"> 
    <ProgressTemplate> 
     <div id="updatestatus" class="shadow"> 
     <asp:Label ID="Label12" runat="server" Text="Loading..."> 
     </asp:Label> 
     <asp:Image ID="Image1" 
     runat="server" ImageUrl="~/images/1status.png" /> 
     </div> 
    </ProgressTemplate> 
</asp:UpdateProgress> 
<asp:UpdatePanel ID="UpdatePanel1" runat="server"> 
    <ContentTemplate> 
     <asp:Timer ID="TimerRefresh" runat="server" Interval="100" 
     ontick="TimerRefresh_Tick" Enabled="False"> 
    <%-- My page loading stuff - controls that would hold data --> 
    </ContentTemplate> 
</asp:UpdatePanel>