C# ASP.NET中继器具有空值

C# ASP.NET中继器具有空值,c#,asp.net,.net,C#,Asp.net,.net,我正在使用ASP.NET Repeater动态生成HTML代码和分页。我在两个aspx页面上使用了完全相同的代码,其中一个页面运行良好,但在另一个页面上我得到了一个例外:对象引用未设置为对象的实例 现在我明白了为什么会发生异常,它只是有一个空值,我猜repeater没有呈现。但是有人知道为什么会发生这个错误,以及它如何可能在一个页面上工作,而在另一个页面上不工作吗?我应该在哪里寻找真正的问题 这是我在aspx页面上的HTML代码: <div class="accordion-wrap pr

我正在使用ASP.NET Repeater动态生成HTML代码和分页。我在两个aspx页面上使用了完全相同的代码,其中一个页面运行良好,但在另一个页面上我得到了一个例外:对象引用未设置为对象的实例

现在我明白了为什么会发生异常,它只是有一个空值,我猜repeater没有呈现。但是有人知道为什么会发生这个错误,以及它如何可能在一个页面上工作,而在另一个页面上不工作吗?我应该在哪里寻找真正的问题

这是我在aspx页面上的HTML代码:

<div class="accordion-wrap projects">
<asp:Repeater runat="server" ID="projectRepeter">
<ItemTemplate>

    <div class="item">
        <div class="heading">
            <span>
                <asp:Label runat="server" ID="TeamMemberName" Text='<%#Eval("ProjectName")%>'></asp:Label></span><span><em>x</em></span>
            <i>+</i>
        </div>
        <div class="details">
            <ul class="form">
                <li>
                    <label>Project name:</label>
                    <input type="text" class="in-text" value="<%#Eval("ProjectName")%>" />
                </li>
                <li>
                    <label>Lead:</label>
                    <asp:DropDownList runat="server" DataSourceID="TeamMemberNameDS"></asp:DropDownList>
                </li>
            </ul>
            <ul class="form">
                <li>
                    <label>Description:</label>
                    <input type="text" class="in-text" value="<%#Eval("Description")%>" />
                </li>
            </ul>
            <ul class="form last">
                <li>
                    <label>Customer:</label>
                    <asp:DropDownList runat="server" DataSourceID="ClientNameDS"></asp:DropDownList>
                </li>
                <li class="inline">
                    <label>Status:</label>
                    <span class="radio">
                        <label for="inactive">Active:</label>
                        <input type="radio" value="1" name="status" id="inactive" />
                    </span>
                    <span class="radio">
                        <label for="active">Inactive:</label>
                        <input type="radio" value="2" name="status" id="active" />
                    </span>
                    <span class="radio">
                        <label for="active">Archive:</label>
                        <input type="radio" value="3" name="status" id="Radio1" />
                    </span>
                </li>
            </ul>
            <div class="buttons">
                <div class="inner">
                    <a href="javascript:;" class="btn green">Save</a>
                    <a href="javascript:;" class="btn red">Delete</a>
                </div>
            </div>
        </div>
    </div>

</ItemTemplate>
</asp:Repeater>
</div>
<div class="pagination">
<asp:Repeater ID="rptPagingProject" runat="server" OnItemCommand="rptPaging_ItemCommand">
<ItemTemplate>
    <asp:LinkButton ID="btnPage"
        CommandName="Page" CommandArgument="<%# Container.DataItem %>" runat="server" ForeColor="Black" Font-Bold="True"><%# Container.DataItem %>
    </asp:LinkButton>
</ItemTemplate>
</asp:Repeater>
</div>
这就是背后的代码:

protected void BindRepeater()
{
    string ConnectionString = "Data Source=PRACTICE-001;Initial Catalog=n.mosorinski;User ID=n.mosorinski;Password=n.mosorinski;MultipleActiveResultSets=True;Application Name=EntityFramework";
    SqlConnection con = new SqlConnection(ConnectionString);
    SqlCommand cmd = new SqlCommand("SELECT p.ProjectName, p.Description, c.ClientName FROM Project AS p INNER JOIN Client AS c ON p.CustomerID = c.ClientID", con);
    if (con.State == ConnectionState.Closed)
    {
        con.Open();
    }
    DataTable dt = new DataTable();
    SqlDataAdapter adp = new SqlDataAdapter(cmd);
    adp.Fill(dt);
    PagedDataSource pgitems = new PagedDataSource();
    DataView dv = new DataView(dt);
    pgitems.DataSource = dv;
    pgitems.AllowPaging = true;
    pgitems.PageSize = 5;
    pgitems.CurrentPageIndex = PageNumber;

    if (pgitems.PageCount > 1)
    {
        rptPagingProject.Visible = true;
        ArrayList pages = new ArrayList();
        for (int i = 0; i < pgitems.PageCount; i++)
            pages.Add((i + 1).ToString());
        rptPagingProject.DataSource = pages;
        rptPagingProject.DataBind();
    }
    else
    {
        rptPagingProject.Visible = false;
    }
    projectRepeter.DataSource = pgitems;
    projectRepeter.DataBind();
}

public int PageNumber
{
    get
    {
        if (ViewState["PageNumber"] != null)
            return Convert.ToInt32(ViewState["PageNumber"]);
        else
            return 0;
    }
    set
    {
        ViewState["PageNumber"] = value;
    }
}

protected void rptPaging_ItemCommand(object source, RepeaterCommandEventArgs e)
{
    PageNumber = Convert.ToInt32(e.CommandArgument) - 1;
    BindRepeater();
}

}

我想你不能这样做。如果您想将分页与repeater控件一起使用,那么这是一个很好的例子。您确定两个页面上都有rptPagingProject,并且两个页面上的pgitems.PageCount都大于1吗?@BARM在工作的页面上的PageCount大于1,因为我有5个以上的结果,不起作用的一个等于一个原因,结果少于五个。是的,项目在两页上。。。我不明白。我已经尝试了另一个例子,从MM Tac下面的评论链接,它给了我同样的结果。当我尝试访问DataSource属性时出现NullException…@MMTac我刚刚尝试了您与我共享的示例,它给出了相同的结果。异常原因中继器给出null…然后在另一个页面上它工作不正常。那是不可能的,因为这与问题无关。