2015-11-20 2 views
0

У меня есть панель обновления на странице, которая содержит вложенные панели. Он имеет панель с небольшой формой (например, в форме входа) и кнопкой. Когда нажимается кнопка, проверяется несколько условий, и если они пройдены, первая панель скрыта, а вторая панель с большей формой отображается.Как установить видимость элемента управления в UpdatePanel, который использует элемент управления UpdateProgress?

Поскольку большая форма может занять некоторое время для загрузки (она извлекает данные из других источников), панель малой формы содержит элемент управления UpdateProgress.

Все это прекрасно работает.

Затем я добавил вложенную панель в панели формы входа, помещенной под UpdateProgress, которая отобразит значимое сообщение об ошибке, например, если код входа неверен. Это отображается как ожидалось. Однако, если пользователь затем исправляет свою информацию и снова нажимает кнопку, UpdateProgress отображается правильно, но сообщение об ошибке остается видимым, хотя я пытаюсь установить его в Visible = false в коде.

Эта страница не использует главную страницу.

Отладка показывает, что свойство Visible имеет значение false, хотя оно все еще отображается в браузере.

ASPX код:.

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="custom_Default" %> 
<!DOCTYPE html> 
<html lang="en"> 
    <head runat="server"> 
    <!-- meta and link tags --> 
    </head> 
    <body> 
     <form id="form1" runat="server"> 
      <div class="container"> 
       <!-- h1 and all that --> 
       <asp:ScriptManager ID="scriptManager" runat="server"></asp:ScriptManager> 
       <asp:UpdatePanel ID="pnlUpdate" runat="server"> 
        <ContentTemplate> 
         <asp:Panel ID="pnlLogin" runat="server"> 
          <!-- label and text field --> 
          <asp:Button ID="btnBegin" runat="server" OnClick="btnBegin_Click" /> 
          <asp:UpdateProgress ID="updProgress" runat="server" AssociatedUpdatePanelID="pnlUpdate"> 
            <ProgressTemplate> 
             <p>Loading, please wait... </p> 
            </ProgressTemplate> 
          </asp:UpdateProgress> 
          <asp:Panel ID="pnlMessage" runat="server" Visible="false"> 
           <asp:Literal ID="ltlMessage" runat="server" /> 
          </asp:Panel> 
         </asp:Panel> 
         <asp:Panel ID="pnlMainForm" runat="server" Visible="false"> 
         </asp:Panel> 
         <asp:Panel ID="pnlConfirmation" runat="server" Visible="false"> 
         </asp:Panel> 
        </ContentTemplate> 
       </asp:UpdatePanel> 
      </div> 
     </form> 
    <!-- javascript - jquery and bootstrap --> 
    </body> 
</html> 

Code Behind (я попытался установить видна ложь в Page_Load, в случае pnlUpdate_Load, а в случае btnBegin_Click - но сообщение об ошибке не исчезнет

protected void btnBegin_Click(object sender, EventArgs e) 
{ 
    pnlMessage.Visible = false; 
    Page.Validate(); 
    if (Page.IsValid) 
    { 
      // check some conditions. if fails: 
      ltlMessage.Text = "Reason for failure"; 
      pnlMessage.Visible = true; // works 
     } 
} 

Я попытался удалить Видимый = «ложь» от pnlMessage на странице ASPX и поместить его в код в Page_Load, но я до сих пор не может скрыть его после того, как уже отображается сообщение.

Как скрыть панель pnlMessage после того, как btnBegin будет нажат второй раз?

ответ

0

Мне удалось найти решение этого вопроса. По-видимому, в .NET нет способа сделать это - это нужно сделать в JavaScript.

Вот код, который я использовал для этого.

<script type="text/javascript"> 

    var prm = Sys.WebForms.PageRequestManager.getInstance(); 

    prm.add_initializeRequest(initializeRequest); 
    prm.add_endRequest(endRequest); 

    var _postBackElement; 

    function initializeRequest(sender, e) { 
     if (prm.get_isInAsyncPostBack()) { 
      e.set_cancel(true); 
     } 

     $get('pnlMessage').style.display = 'none'; 
    } 

    function endRequest(sender, e) { 
     $get('pnlMessage').style.display = 'block'; 
    } 
</script> 
Смежные вопросы