我在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>();
}
答案 0 :(得分:1)
我认为问题在于:
if (list.Count == 0)
{
this.paneBrowse.Visible = false;
}
我没有看到你将paneBrowse
的可见性再次设置为真实的地方。
快速解决方法是:
this.paneBrowse.Visible == (list.Count > 0);