代码之家  ›  专栏  ›  技术社区  ›  Ortund

ASP中继器和SQL数据源问题

  •  0
  • Ortund  · 技术社区  · 14 年前

    这是我的SQL DB中的数据表,下面是我的Repeater控件的代码:

    ArticleID int NOT NULL,
    ArticleTitle varchar(100) NOT NULL,
    ArticleCategory int NOT NULL,
    ArticleDate datetime NOT NULL,
    ArticleContent text NOT NULL,
    DeletedYN char(3) NOT NULL
    
    <asp:Repeater runat="server" ID="rptArticles" DataSourceID="dsLatestArticles">
        <HeaderTemplate>
            <span class="title"><%#Container.DataItem("ArticleTitle")%></span><br />
            <span class="title3">Posted On: <%#Container.DataItem("ArticleDate")%></span>
        </HeaderTemplate>
        <ItemTemplate><p><%#Container.DataItem("ArticleContent")%></p></ItemTemplate>
        <FooterTemplate>
            <p class="RightAlign"><a href="/Articles/Read.aspx?i=<%#Container.DataItem("ArticleID") %>">Read more...</a></p>
        </FooterTemplate>
    </asp:Repeater>
    

    当我试图加载这个页面时,我会错误地说 Object variable or With block variable not set.

    <asp:SqlDataSource ID="dsLatestArticles" runat="server" 
        ConnectionString="<%$ ConnectionStrings:VBSiteConnectionString %>"        
        SelectCommand="SELECT [ArticleID], [ArticleTitle], [ArticleDate], [ArticleContent] FROM [Articles] WHERE ([DeletedYN] = @DeletedYN)">
        <SelectParameters>
            <asp:Parameter DefaultValue="No" Name="DeletedYN" Type="String" />
        </SelectParameters>
    </asp:SqlDataSource>
    

    我不知道我做错了什么,有人看到问题了吗? 为了进一步参考,这里是我的堆栈跟踪:

    [NullReferenceException: Object variable or With block variable not set.]
       Microsoft.VisualBasic.CompilerServices.Container..ctor(Object Instance) +510276
       Microsoft.VisualBasic.CompilerServices.NewLateBinding.InternalLateIndexGet(Object Instance, Object[] Arguments, String[] ArgumentNames, Boolean ReportErrors, ResolutionFailure& Failure) +88
       Microsoft.VisualBasic.CompilerServices.NewLateBinding.LateIndexGet(Object Instance, Object[] Arguments, String[] ArgumentNames) +21
       ASP.default_aspx.__DataBind__control3(Object sender, EventArgs e) in D:\Development\Projects\Web\LogansArchive\Default.aspx:9
       System.Web.UI.Control.OnDataBinding(EventArgs e) +99
       System.Web.UI.Control.DataBind(Boolean raiseOnDataBinding) +92
       System.Web.UI.Control.DataBind() +15
       System.Web.UI.Control.DataBindChildren() +211
       System.Web.UI.Control.DataBind(Boolean raiseOnDataBinding) +102
       System.Web.UI.Control.DataBind() +15
       System.Web.UI.WebControls.Repeater.CreateItem(Int32 itemIndex, ListItemType itemType, Boolean dataBind, Object dataItem) +124
       System.Web.UI.WebControls.Repeater.CreateControlHierarchy(Boolean useDataSource) +323
       System.Web.UI.WebControls.Repeater.OnDataBinding(EventArgs e) +51
       System.Web.UI.WebControls.Repeater.DataBind() +75
       System.Web.UI.WebControls.Repeater.EnsureDataBound() +55
       System.Web.UI.WebControls.Repeater.OnPreRender(EventArgs e) +15
       System.Web.UI.Control.PreRenderRecursiveInternal() +80
       System.Web.UI.Control.PreRenderRecursiveInternal() +171
       System.Web.UI.Control.PreRenderRecursiveInternal() +171
       System.Web.UI.Control.PreRenderRecursiveInternal() +171
       System.Web.UI.Control.PreRenderRecursiveInternal() +171
       System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +842
    

    提前谢谢!

    1 回复  |  直到 14 年前
        1
  •  0
  •   Ortund    14 年前

    万一有人遇到这个问题,我找到了一个解决办法

    原因
    我在 <HeaderTemplate> 这就是造成问题的原因。我不知道为什么,但关键是这样做行不通。

    解决方案
    所有数据检索(即。 <%#Container.DataItem("Field1") %> 块) 必须 用于 <ItemTemplate> 中继器控件的节。