2015-11-13 2 views
1

У меня проблемы с ModalPopupExtender. Я установил targetcontrolid в скрытое поле и вызывает метод show из кода позади. Все отлично работает до 10-го раз, когда я вызываю метод show. Затем он внезапно перестает работать. «Диалог» - это не то, что нужно видеть. Элементы управления на странице больше не отключены. Код за вызовом вызывает, когда я нажимаю кнопку, вызывающую метод show, но вызов метода show не влияет.ajaxctroltoolkik.ModalPopupextender. Останавливает работу после 10 вызовов Show()

Я использую Visual Studio 2010

Вот моя ASPX страница:

<%@ Page Title="" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="MessageBoxTest.aspx.cs" Inherits="SeceOfC2.TEST.MessageBoxTest" %> 
<%@ Register tagName="MessageBox" tagPrefix="uc" src="~/Dialogs/MessageBox.ascx" %> 
<asp:Content ID="Content1" ContentPlaceHolderID="HeadContent" runat="server"> 
</asp:Content> 
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server"> 
    <asp:UpdatePanel runat="server"> 
     <ContentTemplate> 
      <asp:Button runat="server" ID="TestButton" Text="Test" OnClick="TestButton_OnClick" /> 





      <asp:HiddenField runat="server" ID="_Hint"/> <%--Brukt til å vite hvorfor denne dialogen ble kalt.--%> 
      <asp:HiddenField runat="server" ID="_Parameters"/> <%--Her lagres parameterdata som en Json string.--%> 
      <asp:Button runat="server" ID="_dummy"/> 
      <asp:Panel runat="server" ID="MessageBoxPanel"> 
       <asp:Panel runat="server" ID="MessageBoxBorderPanel" BorderColor="LightGray"> 
        <div class="dialogheader"> 
         <div style="text-align: center; float: left"> 
           <asp:Label runat="server" ID="lbHeader"></asp:Label> 
         </div> 
         <div style="float:right"> 
          <asp:ImageButton ID="ImageButton1" runat="server" ImageUrl="~/Images/Icons/Small/navigate_cross.png" /> 
         </div> 
         <div style="clear:both"></div> 
        </div> 
        <div class="dialogbody" style="min-height: 50px"> 
         <asp:Label runat="server" ID="lbBody"></asp:Label> 
        </div> 
        <div class="dialogbody" style="text-align: center"> 
         <asp:Button runat="server" ID="OKButton" Text="OK" OnClick="OnOkClicked"/> 
        </div> 
       </asp:Panel> 
      </asp:Panel> 
      <ajaxToolkit:ModalPopupExtender runat="server" ID="MessageBoxPopupExtender" TargetControlID="_dummy" PopupControlID="MessageBoxPanel" RepositionMode="RepositionOnWindowResizeAndScroll" PopupDragHandleControlID="MessageBoxBorderPanel" DropShadow="True" /> 



     </ContentTemplate> 
    </asp:UpdatePanel> 


</asp:Content> 

Masterpage, содержащий менеджер сценария:

<%@ Master Language="C#" AutoEventWireup="true" CodeBehind="Site.master.cs" Inherits="SeceOfC2.SiteMaster" %> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> 
<head runat="server"> 
    <title></title> 
    <link href="~/Styles/Site.css" rel="stylesheet" type="text/css" /> 
    <asp:ContentPlaceHolder ID="HeadContent" runat="server"> 
    </asp:ContentPlaceHolder> 
    <script language="JavaScript1.2" src="/scripts/jquery-1.4.1.js" type="text/javascript" defer="defer"></script> 
    <script type="text/javascript"> 
     window.onresize = function(event) { 
      var height = $(window).height(); 
      var width = $(window).width(); 

      $.ajax({ 
       url: "/HttpHandlers/getwindowsize.ashx", 
       type: "POST", 
       data: { 
        Height: height, 
        Width: width, 
        selectedValue: selectedValue 
       }, 
       contentType: "application/json; charset=utf-8", 
       dataType: "json", 
       success: function(response) { 
        // do stuff 
       } 

      }); 
     } 

    </script> 

</head> 
<body> 
    <form runat="server"> 
    <asp:ScriptManager ID="ScriptManager1" runat="server"> 
    </asp:ScriptManager> 
    <div class="page"> 
     <div class="header"> 
      <div class="title"> 
       <h1> 
        SenseOfC Drill execution prototype 
       </h1> 
      </div> 
      <div class="loginDisplay"> 
       <asp:LoginView ID="HeadLoginView" runat="server" EnableViewState="false"> 
        <AnonymousTemplate> 
         [ <a href="~/Account/Login.aspx" ID="HeadLoginStatus" runat="server">Log In</a> ] 
        </AnonymousTemplate> 
        <LoggedInTemplate> 
         Welcome <span class="bold"><asp:LoginName ID="HeadLoginName" runat="server" /></span>! 
         [ <asp:LoginStatus ID="HeadLoginStatus" runat="server" LogoutAction="Redirect" LogoutText="Log Out" LogoutPageUrl="~/"/> ] 
        </LoggedInTemplate> 
       </asp:LoginView> 
      </div> 
      <div class="clear hideSkiplink"> 
       <asp:Menu ID="NavigationMenu" runat="server" CssClass="menu" EnableViewState="false" IncludeStyleBlock="false" Orientation="Horizontal"> 
        <Items> 
         <asp:MenuItem NavigateUrl="~/Content/Users/DrillView.aspx" Text="Home"/> 
         <asp:MenuItem NavigateUrl="~/Content/Administrators/TreatmentView.aspx" 
          Text="Admin" Value="Admin"></asp:MenuItem> 
         <asp:MenuItem NavigateUrl="~/About.aspx" Text="About"/> 
        </Items> 
       </asp:Menu> 
      </div> 
     </div> 
     <div class="main"> 
      <asp:ContentPlaceHolder ID="MainContent" runat="server"/> 
     </div> 
     <div class="clear"> 
     </div> 
    </div> 
    <div class="footer"> 

    </div> 
    </form> 
</body> 
</html> 

и вот мой код позади:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using SeceOfC2.Dialogs; 
using SeceOfC2.Tools; 

namespace SeceOfC2.TEST 
{ 
    public partial class MessageBoxTest : System.Web.UI.Page 
    { 
     protected void Page_Load(object sender, EventArgs e) 
     { 

     } 

     protected void TestButton_OnClick(object sender, EventArgs e) 
     { 
      Show("TEST", "TEST"); 
     } 



     public void Show(string caption, string message, string hint = "", MessageBox.Buttons buttons = MessageBox.Buttons.Ok) 
     { 
      _Hint.Value = hint; 
      _Parameters.Value = JsonHelper.Serialize(""); 
      lbHeader.Text = caption; 
      lbBody.Text = message; 
      MessageBoxPopupExtender.Show(); 
     } 


     protected void OnOkClicked(object sender, EventArgs e) 
     { 


     } 
    } 
} 

Если я установил TargetControlID в видимый элемент управления. ModalPopupExtender все еще работает, но вызов кода не вызван, очевидно, мешает мне помещать любые данные в поля в диалоговом окне.

Update: Я testet в стандартной странице ASPX (без Masterpage):

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="MessageBoxTestNoMaster.aspx.cs" Inherits="SeceOfC2.TEST.MessageBoxTestNoMaster" %> 
<%@ Register tagName="MessageBox" tagPrefix="uc" src="~/Dialogs/MessageBox.ascx" %> 
<!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></title> 
</head> 
<body> 
    <form id="form1" runat="server"> 
    <asp:ScriptManager ID="ScriptManager1" runat="server"> 
    </asp:ScriptManager> 
    <asp:UpdatePanel ID="UpdatePanel1" runat="server"> 
     <ContentTemplate> 
      <asp:Button runat="server" ID="TEST" Text="Test" OnClick="TEST_OnClick"/> 

      <uc:MessageBox runat="server" ID="MessageBox" />    
     </ContentTemplate> 
    </asp:UpdatePanel> 
    </form> 
</body> 
</html> 

Диалог был перемещен в UserControl:

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="MessageBox.ascx.cs" Inherits="SeceOfC2.Dialogs.MessageBox" %> 
<asp:HiddenField runat="server" ID="_Hint"/> <%--Brukt til å vite hvorfor denne dialogen ble kalt.--%> 
<asp:HiddenField runat="server" ID="_Parameters"/> <%--Her lagres parameterdata som en Json string.--%> 
<asp:HiddenField runat="server" ID="dummy"/> 
<asp:Panel runat="server" ID="MessageBoxPanel"> 
    <%--<ajaxToolkit:DropShadowExtender ID="DropShadowExtender1" runat="server" TargetControlID="MessageBoxBorderPanel" Opacity="0.1" Radius="10"/>--%> 
    <asp:Panel runat="server" ID="MessageBoxBorderPanel" BorderColor="LightGray"> 
     <div class="dialogheader"> 
      <div style="text-align: center; float: left"> 
        <asp:Label runat="server" ID="lbHeader"></asp:Label> 
      </div> 
      <div style="float:right"> 
       <asp:ImageButton ID="ImageButton1" runat="server" ImageUrl="~/Images/Icons/Small/navigate_cross.png" OnClick="OnCloseClicked" /> 
      </div> 
      <div style="clear:both"></div> 
     </div> 
     <div class="dialogbody" style="min-height: 50px"> 
      <asp:Label runat="server" ID="lbBody"></asp:Label> 
     </div> 
     <div class="dialogbody" style="text-align: center"> 
      <asp:Button runat="server" ID="OKButton" Text="OK" OnClick="OnOkClicked"/> 
      <asp:Button runat="server" ID="CancelButton" Text="Avbryt" OnClick="OnCancelClicked"/> 
      <asp:Button runat="server" ID="YesButton" Text="Ja" OnClick="OnYesClicked"/> 
      <asp:Button runat="server" ID="NoButton" Text="Nei" OnClick="OnNoClicked"/> 
     </div> 
    </asp:Panel> 
</asp:Panel> 
<ajaxToolkit:ModalPopupExtender runat="server" ID="MessageBoxPopupExtender" TargetControlID="dummy" PopupControlID="MessageBoxPanel" RepositionMode="RepositionOnWindowResizeAndScroll" PopupDragHandleControlID="MessageBoxBorderPanel" DropShadow="True" /> 

На данный момент существует ссылка на классы css не используется, поэтому диалог выглядит немного голым, но он работает !! Я могу показать и скрыть диалог столько раз, сколько захочу.

Обновление 2: Ссылка на css-файл не представляет проблемы. Теперь диалог выглядит так, как должен.

Upate 3: Пробовал переместить ссылку на scriptmanager с главной страницы на страницу. Тот же результат. Не работает.

Обновление 4: Устранено недостоверность файла css. Поле сообщений теперь работает.

Обновление 5: Я еще не ушел, но немного дольше, чем несколько минут назад.

Проблема, похоже, связана со стандартным asp. веб-приложение, которое вы получаете из коробки из Visual Studio 2010 и файл CSS, который вы найдете в каталоге Styles. Я попытаюсь немного поиграть с ним, и, возможно, я смогу понять, что такое chraning с помощью ModalPopupExtender.

After deactivating some more of the classes in the css files

окно сообщения неожиданно помещается позади другого материала в форме и его больше не покадрово. Я могу щелкнуть по любой части формы, которую я хочу, и увольнению событий.

Update 6: Я воспроизвел ошибку без MasterPage и только Зингель стайлинга элемент:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="MessageBoxTestNoMaster.aspx.cs" Inherits="SeceOfC2.TEST.MessageBoxTestNoMaster" %> 
<%@ Register tagName="MessageBox" tagPrefix="uc" src="~/Dialogs/MessageBox.ascx" %> 
<!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></title> 
      <style type="text/css"> 
    .page 
    { 
     width: 960px; 
     background-color: #fff; 
     margin: 20px 0px; 
     border: 1px solid #496077; 
    } 
</style> 

</head> 

<body> 

    <form id="form1" runat="server"> 


    <div class="page"> 
    <asp:ScriptManager ID="ScriptManager1" runat="server"> 
    </asp:ScriptManager> 
    <asp:UpdatePanel ID="UpdatePanel1" runat="server"> 
     <ContentTemplate> 
      <asp:Button runat="server" ID="TEST" Text="Test" OnClick="TEST_OnClick"/> 

      <uc:MessageBox runat="server" ID="MessageBox" />    
     </ContentTemplate> 
    </asp:UpdatePanel> 
    </div> 
    </form> 
</body> 
</html> 

This is what it looks like without master page and only one style element

диалоговое окно виден, но скрывается за DIV с «страницы» класса , Hapens после 10 звонков, чтобы показать метод. Модальная функциональность больше не активна, и я могу щелкнуть как кнопку ok в диалоговом окне, так и кнопку в форме, вызывающей метод show.

+0

Таким образом, он работает без мастер-страницы, но с главной страницей вы можете назвать его ровно 10 раз? Или 10 раз в среднем? –

+0

10 раз. Но я также обнаружил, что проблема возникает раньше, если я включаю listview, находящуюся внутри той же самой панели обновлений, что и пользовательский элемент управления сообщениями, и обработка событий из элементов списка. С этим тестом, как всегда, его ровно 10 раз каждый раз. –

+0

Я думаю, что причина, по которой он работает без главной страницы, но с тем же css, состоит в том, что некоторая часть файла css не используется на мастер-странице без теста. –

ответ

1

У меня была эта же проблема с AjaxControlToolkit 15.4.1 ModalPopupExtender, и что решить это для меня было (1) убедившись, что все кнопки были в теге PostBackTrigger, то есть:

</ContentTemplate> 
    <Triggers> 
     <asp:PostBackTrigger ControlID="btnDownload" /> 
    </Triggers> 
</asp:UpdatePanel> 

... а затем (2) удаляет свойство «CancelButtonID», если оно существует, и используя фактическое нажатие кнопки или командное событие, чтобы скрыть расширитель.

Хотел бы я сказать, почему это сработало, но я не знаю достаточно о контрольном наборе инструментов, чтобы сказать ... надеюсь, что это поможет!

 Смежные вопросы

  • Нет связанных вопросов^_^