第二组数据绑定后,Repeater不显示任何内容

时间:2013-02-13 17:32:35

标签: asp.net data-binding webforms repeater

我在ASCX文件中有以下转发器:

<asp:Repeater ID="repeater1" runat="server">
            <HeaderTemplate>
                <ul class="formList">
            </HeaderTemplate>
            <ItemTemplate>
                <li><a href="plugins/umbracocontour/editForm.aspx?guid=<%# ((Umbraco.Forms.Core.Form)Container.DataItem).Id %>"
                    class="form">
                    <%# ((Umbraco.Forms.Core.Form)Container.DataItem).Name %></a> <small><a href="plugins/umbracocontour/editForm.aspx?guid=<%# ((Umbraco.Forms.Core.Form)Container.DataItem).Id %>">
                        Open form designer</a> <a href="plugins/umbracocontour/editFormEntries.aspx?guid=<%# ((Umbraco.Forms.Core.Form)Container.DataItem).Id %>">
                            View entries</a> </small></li>
            </ItemTemplate>
            <FooterTemplate>
                </ul>
            </FooterTemplate>
        </asp:Repeater>

通过名为ShowAllForms()

的方法填充数据
private void ShowAllForms()
{
    using (var formStorage = new FormStorage())
    {
        var list = formStorage.GetAllForms(false).OrderBy(f => f.Name).Where(form => Security.HasAccessToForm(form.Id)).ToList();

        this.repeater1.DataSource = list;
        this.repeater1.DataBind();

        if (list.Count == 0)
        {
            this.paneBrowse.Visible = false;
        }
    }
}

和`SearchForms:

private void SearchForms()
{
    var forms =
        this.formRepository.GetFormByFreeText(this.txtFormSearch.Text).Where(form => Security.HasAccessToForm(form.Id)).
            ToList();

    this.repeater1.DataSource = forms;
    this.repeater1.DataBind(); 
}

ShowAllForms()Page_Load中调用,如果没有回发,也在“显示所有表单”按钮的单击事件中调用。在“搜索表单”按钮的回发中调用SearchForms()

作为非管理员用户,当我查看表单列表时,我最初会看到一大堆表单。然后,我通过它的名称搜索表单,该表单不应返回任何项目。到现在为止还挺好。然后,我单击“显示所有表单”按钮,该按钮将执行ShowAllForms(),这是首先显示所有表单的内容。

但是,当第二次调用时,ShowAllForms()不会在转发器中显示任何表单数据。为了澄清,我可以看到forms变量中有返回的项目,因此集合不为空,但这些项目都没有出现在转发器中。

我对这里可能会发生什么感到困惑。

编辑:

页面的OnLoad事件:

protected void Page_Load(object sender, EventArgs e)
{ 
    if (!this.IsPostBack)
    {
        this.ShowAllForms();    
    }
}

的OnInit:

protected void Page_Init(object sender, EventArgs e)
{
    this.formRepository = TinyIoC.TinyIoCContainer.Current.Resolve<IFormRepository>();
}

1 个答案:

答案 0 :(得分:1)

我认为问题在于:

    if (list.Count == 0)
    {
        this.paneBrowse.Visible = false;
    }

我没有看到你将paneBrowse的可见性再次设置为真实的地方。

快速解决方法是:

    this.paneBrowse.Visible == (list.Count > 0);