1

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()次に、最初にすべてのフォームを表示するために呼び出されたを実行する [すべてのフォームを表示] ボタンをクリックします。

ただし、2 回目に呼び出されると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>();
}
4

1 に答える 1

1

問題はここにあると思います:

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

paneBrowseの可視性を再び true に設定した場所がわかりません。

簡単な修正は次のとおりです。

    this.paneBrowse.Visible == (list.Count > 0);
于 2013-02-13T18:00:37.147 に答える