swabygw Ответов: 1

Простой Модальный Всплывающий Пример Не Работает


Это был простой модальный всплывающий пример, предоставленный онлайн в CodeProject Рахманом Масудуром (ссылка: ASP.NET AJAX Control Toolkit ModalPopupExtender Control in Action[^]) 4 апреля 2009 года. Не могу заставить его работать (ошибок нет, но ничего не происходит, хотя кажется, что страница подчиняется). Есть идеи?


<%@ Page Language="VB" aspcompat="true" Debug="true" %>
<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="cc1" %>

<html>

<style type="text/css">
.ModalPopupBG
{
    background-color: #666699;
    filter: alpha(opacity=50);
    opacity: 0.7;
}

.HellowWorldPopup
{
    min-width:200px;
    min-height:150px;
    background:white;
}
</style>

  <body>
  
    <form id="frm_FileUpload"  runat="server">


<asp:scriptmanager id="ScriptManager1" runat="server">


<asp:button id="Button1" runat="server" text="Button" />

<cc1:modalpopupextender id="ModalPopupExtender1"  runat="server" 

	cancelcontrolid="btnCancel" okcontrolid="btnOkay" 

	targetcontrolid="Button1" popupcontrolid="Panel1" 

	popupdraghandlecontrolid="PopupHeader" drag="true" 

	backgroundcssclass="ModalPopupBG">


<asp:panel id="Panel1" style="display: none" runat="server">
	<div class="HellowWorldPopup">
                <div class="PopupHeader" id="PopupHeader">Header</div>
                <div class="PopupBody">
                    <p>This is a simple modal dialog</p>
                </div>
                <div class="Controls">
                    <input id="btnOkay" type="button" value="Done" />
                    <input id="btnCancel" type="button" value="Cancel" />
		</div>
        </div>



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





Я нашел две вещи:

а) после нажатия клавиши F12 и просмотра отладчика я получаю ошибку JavaScript: "невозможно получить свойство 'UI' неопределенной или нулевой ссылки" и выделил строку кода:

$создание(представление sys.Продлевается.Пользовательского интерфейса.ModalPopupBehavior, {"BackgroundCssClass":"ModalPopupBG","CancelControlID":"btnCancel","Drag":true,"OkControlID":"btnOkay","PopupControlID":"Panel1","PopupDragHandleControlID":"PopupHeader","dynamicServicePath":"/popup.aspx","id":"ModalPopupExtender1"}, нуль, нуль, $получить("кнопка 1"));

Б) и что мой web.config может быть причиной некоторых проблем, поэтому я заменил его на значение по умолчанию, предоставленное Visual Web Developer 2008. Вот копия моего web.config:

<?xml version="1.0"?>

<configuration>
  

    <configSections>
      <sectionGroup name="system.web.extensions" type="System.Web.Configuration.SystemWebExtensionsSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
        <sectionGroup name="scripting" type="System.Web.Configuration.ScriptingSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
          <sectionGroup name="webServices" type="System.Web.Configuration.ScriptingWebServicesSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
          </sectionGroup>
        </sectionGroup>
      </sectionGroup>
    </configSections>  


    <appSettings/>
    <connectionStrings/>
  
    <system.web>
        <!-- 
            Set compilation debug="true" to insert debugging 
            symbols into the compiled page. Because this 
            affects performance, set this value to true only 
            during development.

            Visual Basic options:
            Set strict="true" to disallow all data type conversions 
            where data loss can occur. 
            Set explicit="true" to force declaration of all variables.
        -->
        <compilation debug="false" strict="false" explicit="true">

          <assemblies>
            <add assembly="System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
            <add assembly="System.Data.DataSetExtensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
            <add assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
            <add assembly="System.Xml.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
          </assemblies>

        </compilation>
        <pages>
          <namespaces>
            <clear />
            <add namespace="System" />
            <add namespace="System.Collections" />
            <add namespace="System.Collections.Generic" />
            <add namespace="System.Collections.Specialized" />
            <add namespace="System.Configuration" />
            <add namespace="System.Text" />
            <add namespace="System.Text.RegularExpressions" />
            <add namespace="System.Linq" />
            <add namespace="System.Xml.Linq" />
            <add namespace="System.Web" />
            <add namespace="System.Web.Caching" />
            <add namespace="System.Web.SessionState" />
            <add namespace="System.Web.Security" />
            <add namespace="System.Web.Profile" />
            <add namespace="System.Web.UI" />
            <add namespace="System.Web.UI.WebControls" />
            <add namespace="System.Web.UI.WebControls.WebParts" />
            <add namespace="System.Web.UI.HtmlControls" />
          </namespaces>

          <controls>
            <add tagPrefix="asp" namespace="System.Web.UI" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
            <add tagPrefix="asp" namespace="System.Web.UI.WebControls" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
          </controls>

        </pages>
        <!--
            The <authentication> section enables configuration 
            of the security authentication mode used by 
            ASP.NET to identify an incoming user. 
        -->
        <authentication mode="Windows" />
        <!--
            The <customErrors> section enables configuration 
            of what to do if/when an unhandled error occurs 
            during the execution of a request. Specifically, 
            it enables developers to configure html error pages 
            to be displayed in place of a error stack trace.

        <customErrors mode="RemoteOnly" defaultRedirect="GenericErrorPage.htm">
            <error statusCode="403" redirect="NoAccess.htm" />
            <error statusCode="404" redirect="FileNotFound.htm" />
        </customErrors>
        -->

      <httpHandlers>
        <remove verb="*" path="*.asmx"/>
        <add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
        <add verb="*" path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
        <add verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" validate="false"/>
      </httpHandlers>
      <httpModules>
        <add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
      </httpModules>


    </system.web>

    <system.codedom>
      <compilers>
        <compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" warningLevel="4"

                  type="Microsoft.VisualBasic.VBCodeProvider, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
          <providerOption name="CompilerVersion" value="v3.5"/>
          <providerOption name="OptionInfer" value="true"/>
          <providerOption name="WarnAsError" value="false"/>
        </compiler>
      </compilers>
    </system.codedom>

    <!-- 
        The system.webServer section is required for running ASP.NET AJAX under Internet
        Information Services 7.0.  It is not necessary for previous version of IIS.
    -->
    <system.webServer>
      <validation validateIntegratedModeConfiguration="false"/>
      <modules>
        <remove name="ScriptModule" />
        <add name="ScriptModule" preCondition="managedHandler" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
      </modules>
      <handlers>
        <remove name="WebServiceHandlerFactory-Integrated"/>
        <remove name="ScriptHandlerFactory" />
        <remove name="ScriptHandlerFactoryAppServices" />
        <remove name="ScriptResource" />
        <add name="ScriptHandlerFactory" verb="*" path="*.asmx" preCondition="integratedMode"

             type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
        <add name="ScriptHandlerFactoryAppServices" verb="*" path="*_AppService.axd" preCondition="integratedMode"

             type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
        <add name="ScriptResource" preCondition="integratedMode" verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
      </handlers>
    </system.webServer>

    <runtime>
      <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
        <dependentAssembly>
          <assemblyIdentity name="System.Web.Extensions" publicKeyToken="31bf3856ad364e35"/>
          <bindingRedirect oldVersion="1.0.0.0-1.1.0.0" newVersion="3.5.0.0"/>
        </dependentAssembly>
        <dependentAssembly>
          <assemblyIdentity name="System.Web.Extensions.Design" publicKeyToken="31bf3856ad364e35"/>
          <bindingRedirect oldVersion="1.0.0.0-1.1.0.0" newVersion="3.5.0.0"/>
        </dependentAssembly>
      </assemblyBinding>
    </runtime>

</configuration>

Tadit Dash (ତଡିତ୍ କୁମାର ଦାଶ)

Все теги находятся в небольшом регистре здесь, в опубликованном коде. Но ... ASP.NET чувствителен к регистру. Итак, сделайте дело правильным при использовании элементов управления. Я думаю, что это проблема.

swabygw

Спасибо за ответ, Тадит дэш. Я изменил "scriptmanager" на "ScriptManager", "button" на "Button", "panel" на "Panel" и "modalpopupextender" на "ModalPopupExtender". Но результат тот же. Может быть, я что-то пропустил? Сработал ли этот код для вас, изменив регистр на элементах управления?

Tadit Dash (ତଡିତ୍ କୁମାର ଦାଶ)

Я не пытался сделать это со своей стороны. Я сейчас не свободен, поэтому не могу проверить.

Теперь посмотрите окно консоли инструмента разработчика, есть ли какие-либо ошибки в списке или нет.

swabygw

Я добавил ошибку JavaScript и копию моего web.config в исходный вопрос. Спасибо.

swabygw

Спасибо за ответ, Тадит дэш. Я изменил "scriptmanager" на "ScriptManager", "button" на "Button", "panel" на "Panel" и "modalpopupextender" на "ModalPopupExtender". Но результат тот же. Может быть, я что-то пропустил? Сработал ли этот код для вас, изменив регистр на элементах управления?

Sampath Lokuge

Когда вы ставите комментарий для чужого комментария,используйте его собственную кнопку "ответить".В противном случае он его не оповестит. :(

swabygw

Вижу - обойдется.

PJ003

Попробуйте проверить наличие ошибок скрипта в "консоли инструментов разработчика" в вашем браузере (например, F12 в Chrome и IE).

Sunasara Imdadhusen

Где находится ваш серверный код?

swabygw

Код в исходном вопросе-это код на стороне сервера (код в файле .aspx). Спасибо.

swabygw

Я добавил ошибку JavaScript и копию моего web.config в исходный вопрос. Спасибо.

karthik Udhayakumar

Попробуйте заменить asp:ScriptManager на ajaxtoolkit:toolkitscriptmanager

1 Ответов

Рейтинг:
1

swabygw

Я заставил его работать. Корень проблемы заключался в том, что существовал конфликт между версией пула приложений и файлом Web.Config. Я использовал пул приложений v4.0, но, по-видимому, Web.Config был настроен на v2.0. Я установил файл Web.Config по умолчанию (из Visual Web Developer 2008), который на самом деле был конфигурацией v3.5, так что он тоже не работал. Затем, просмотрев различия между 3.5 и 4.0, прокомментировал следующий раздел Web.Config:

<runtime>
   <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
         <assemblyIdentity name="System.Web.Extensions" publicKeyToken="31bf3856ad364e35" />
         <bindingRedirect oldVersion="1.0.0.0-1.1.0.0" newVersion="3.5.0.0" />
      </dependentAssembly>
      <dependentAssembly>
         <assemblyIdentity name="System.Web.Extensions.Design" publicKeyToken="31bf3856ad364e35" />
         <bindingRedirect oldVersion="1.0.0.0-1.1.0.0" newVersion="3.5.0.0" />
      </dependentAssembly>
   </assemblyBinding>
</runtime>


И вуаля, теперь у меня есть файл v4.0 Web.Config, и код сработал.


Maciej Los

5 за ваши усилия!