【问题标题】:Object not set to a reference for SlideshowExtender对象未设置为 SlideshowExtender 的参考
【发布时间】:2013-10-22 07:25:54
【问题描述】:

我对这个问题束手无策。我想将 AjaxControltoolkit 中的 SlideShowExtender 用于“类似 CMS”的网站,但我收到错误消息... “ajaxcontroltoolkit.slideshowextender 对象引用未设置为对象的实例。ajaxcontroltoolkit.slideshowextender.oninit(eventargs e)。”我正在使用母版页,并在默认页面上包含了一个 scriptmanagerproxy,在 PDAP.master 母版页中包含了一个 takeitscriptmanager。这是代码。这是草稿,仅处于概念阶段。

PDAP.master

过渡//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

 <title></title>

   <form id="form1" runat="server">
   <ajax:ToolkitScriptManager ID="ToolkitScriptManager1" runat="server">
   <Services>
       <asp:ServiceReference Path="~/Slideshow.asmx" />
   </Services>
   </ajax:ToolkitScriptManager>
   <asp:ContentPlaceHolder id="HeadContent" runat="server">

   PDAP  
   </asp:ContentPlaceHolder>

   <div>
   <div id="centercontent" >
       <asp:ContentPlaceHolder id="CenterContent" runat="server" >
       CenterContent
       </asp:ContentPlaceHolder>
   </div>
   <div id="rightcontent">
       <asp:ContentPlaceHolder ID="RightContent" runat="server">
       RightContent
       </asp:ContentPlaceHolder>
   </div>
   <div id="leftcontent">
       <asp:ContentPlaceHolder ID="LeftContent" runat="server" >
       LeftContent
       </asp:ContentPlaceHolder>
   </div>
   </div>
   </form>

default.aspx

<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="CenterContent">
    <asp:ScriptManagerProxy ID="ScriptManagerProxy1" runat="server" ProfileService-Path="~/Slideshow.asmx">
    <Services >
    <asp:ServiceReference Path="~/Slideshow.asmx" InlineScript="false" />
    </Services>
    </asp:ScriptManagerProxy>
        Default page with Slideshow
    <ajax:SlideShowExtender ID="SlideShowExtender1" 
                            runat="server"
                            Loop="true"
                            SlideShowAnimationType="SlideRight"
                            PlayInterval="4000"
                            SlideShowServiceMethod="GetSlides"  
                            SlideShowServicePath="Slideshow.asmx" >
    </ajax:SlideShowExtender>
    <asp:Image ID="imgslides" 
               runat="server" />
</asp:Content>

网络服务 - Slideshow.cs

使用系统; 使用 System.Collections.Generic; 使用 System.Linq; 使用 System.Web; 使用 System.Web.Services;

/// /// 幻灯片的摘要描述 /// [WebService(命名空间="http://microsoft.com/webservices/")] [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] // 要允许使用 ASP.NET AJAX 从脚本调用此 Web 服务,请取消注释 > 下一行。 [System.Web.Script.Services.ScriptService] 公共类幻灯片:System.Web.Services.WebService {

   public Slideshow () {

      //Uncomment the following line if using designed components 
       //InitializeComponent(); 
   }

   [System.Web.Services.WebMethod] 
   [System.Web.Script.Services.ScriptMethod]
   public AjaxControlToolkit.Slide[] GetSlides()
   {
       string[] imagenames = System.IO.Directory.GetFiles(Server.MapPath("~/Images"));
       AjaxControlToolkit.Slide[] photos = new AjaxControlToolkit.Slide[imagenames.Length];
       for (int i = 0; i < imagenames.Length; i++)
       {
           string[] file = imagenames[i].Split('\\');
           photos[i] = new AjaxControlToolkit.Slide("Images/" + file[file.Length - 1], file [file.Length - 1], "");
   }
   return photos;
   }

}

我举了一个例子,并使用它来学习,但代码位于我无法访问 IIS 的开发服务器上。

请看看我做错了什么。

【问题讨论】:

  • 只是在想,难道 AjaxControlToolkit.dll 可能不在开发服务器上吗?

标签: c# asp.net asp.net-ajax ajaxcontroltoolkit nullreferenceexception


【解决方案1】:

有完全相同的问题,类似的场景,包括母版页。无法命中任何断点,因为它立即失败。

反复试验得出了答案 - 需要填写其余属性,正如 pintosack 提到的 - TargetControlID。

    <asp:Image ID="Image1" runat="server" Height="316px" Width="388px" />
<cc1:SlideShowExtender ID="SlideShowExtender1" runat="server" 
    TargetControlID="Image1" 
    SlideShowServiceMethod="GetSlides" 
    AutoPlay="true" 
    ImageTitleLabelID="imageTitle"
    ImageDescriptionLabelID="imageDescription"
    NextButtonID="btnNext" 
    PlayButtonText="Play" 
    StopButtonText="Stop" 
    PreviousButtonID="prevButton" 
    PlayButtonID="btnPlay" 
    Loop="true" 
    SlideShowAnimationType="FadeInOut">
</cc1:SlideShowExtender> 
<div>
    <asp:Label ID="lblDesc" runat="server" Text=""></asp:Label><br />
    <asp:Button ID="btnPrev" runat="server" Text="Previous" />
    <asp:Button ID="btnPlay" runat="server" Text="" />
    <asp:Button ID="btnNext" runat="server" Text="Next" />
</div>

【讨论】:

    【解决方案2】:

    我遇到了这个错误,这是因为幻灯片扩展器没有看到“TargetControlID”控件。就我而言,我有一个拼写错误。希望这会有所帮助。

    【讨论】:

    • 拜托,您能否通过添加解决您问题的代码 sn-p 来改进您的答案?
    【解决方案3】:

    首先,我会在您的代码中放置一个 try catch,然后在每个函数的开头放置断点。然后按 f10 遍历,当你到达代码跳转到 catch 中的点时,你就可以识别出麻烦制造者了。

    告诉我你发现了什么......

    【讨论】:

    • 我忘记添加服务器错误消息...
      对象引用未设置为对象的实例。说明:执行当前 Web 请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。异常详细信息:System.NullReferenceException:对象引用未设置为对象的实例。堆栈跟踪:[NullReferenceException:对象引用未设置为对象的实例。] AjaxControlToolkit.SlideShowExtender.OnInit(EventArgs e) +128
    • 添加断点并通过 F10 运行。没有击中断点。不过还是谢谢。
    • 只是想弄清楚这是否是 ajaxtoolkit 的版本问题,还是引用它时缺少某些东西。
    • 好的,如果您进入后端,那么 ajax 中将返回一个空值。您可以在视图中放置警报,以查看在运行代码时是否收到警报?您可能引用了一个缺失的所有内容。
    猜你喜欢
    • 2012-07-23
    • 2021-01-14
    • 1970-01-01
    • 1970-01-01
    • 2011-12-17
    • 1970-01-01
    • 1970-01-01
    • 2018-09-25
    • 2011-07-23
    相关资源
    最近更新 更多