Свойства UserControl и шаблон WebPartsTemplate, потерянные значения - PullRequest
0 голосов
/ 04 января 2011

Я пытаюсь добавить UserControls в веб-часть CatalogZone, но значения свойств, которые я назначаю элементам управления, теряются (или не сохраняются на дисплее), когда пользователь выбирает элемент управления, который будет добавлен на дисплей.Если я объявлю одно и то же определение элемента управления явно в WebPartZone, значения свойств сохранятся.Я прошел по коду и обнаружил, что когда элементы управления, которые выбираются из CatalogZone и впоследствии загружаются из базы данных персонализации, определенные мной значения теряются / забываются / оставляются.Пожалуйста, смотрите мой код ниже.

TestPage.aspx

<%@ Register Src="~/UserControls/TestControl.ascx"TagName="TestControl" TagPrefix="test"  %>

<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">
<asp:WebPartManager ID="WebPartManager1" runat="server">
</asp:WebPartManager>
<asp:DropDownList ID="ddlListModes" runat="server" AutoPostBack="true" />  
<asp:WebPartZone ID="WebPartZone1" runat="server">
    <ZoneTemplate>            
        <test:TestControl ID="TestControl1" runat="server" FontBold="true" />     
    </ZoneTemplate>
</asp:WebPartZone>
<asp:CatalogZone ID="CatalogZone1" runat="server">
    <ZoneTemplate>
        <asp:DeclarativeCatalogPart ID="dcp1" runat="server">
            <WebPartsTemplate>
                <test:TestControl ID="TestControl2" runat="server" FontBold="true" />  
            </WebPartsTemplate>
        </asp:DeclarativeCatalogPart>
    </ZoneTemplate>
</asp:CatalogZone>
</asp:Content>

Итак, в приведенном выше коде для TestControl1, определенного в WebPartZone.ZoneTemplate, значение для FontBoldсохраняется при создании экземпляра элемента управления, а свойство font-bold для usercontrol имеет значение true.

Для TestControl2, определенного в CatalogZone.ZoneTemplate.DeclarativeCatalogPart.WebPartsTemplate, значение для FontBold не сохраняется при создании экземпляра элемента управления и пользовательский контрольЗначение FontBold никогда не устанавливается.

Я пытался использовать ViewState, ControlState и т. Д. Для сохранения значения, думая, что это не постоянные обратные вызовы, но проблема заключается в том, что значение FontBold никогда не устанавливается {}.

Есть идеи?

Спасибо, что нашли время, чтобы прочитать и ответить.

Райан

Остальная часть кода

TestPage.aspx.cs

public partial class WebPartTest : System.Web.UI.Page
{
    protected override void OnInit(EventArgs e)
    {
        base.OnInit(e);

        Page.InitComplete += new EventHandler(BindDdlListModes);
        ddlListModes.SelectedIndexChanged += new EventHandler(ddlListModes_SelectedIndexChanged);
    }

    protected void Page_Load(object sender, EventArgs e)
    {

    }

    protected void BindDdlListModes(object sender, EventArgs e)
    {
        WebPartManager wpm = WebPartManager.GetCurrentWebPartManager(Page);
        string browseModeName = WebPartManager.BrowseDisplayMode.Name;

        ddlListModes.Items.Clear();

        foreach (WebPartDisplayMode mode in wpm.SupportedDisplayModes)
        {
            if (mode.IsEnabled(wpm))
            {
                ListItem item = new ListItem(mode.Name);
                ddlListModes.Items.Add(item);
            }
        }

        int index = ddlListModes.Items.IndexOf(ddlListModes.Items.FindByText(wpm.DisplayMode.Name));
        ddlListModes.SelectedIndex = index;
    }

    protected void ddlListModes_SelectedIndexChanged(object sender, EventArgs e)
    {
        WebPartManager wpm = WebPartManager.GetCurrentWebPartManager(Page);
        WebPartDisplayMode displayMode = wpm.SupportedDisplayModes[ddlListModes.SelectedValue];

        if (displayMode != null)
            wpm.DisplayMode = displayMode;

    }
}

TestControl.ascx.cs Элемент управления состоит только из одной метки, для которой я устанавливаю значение Font-bold через FontBoldсобственность.

public partial class TestControl : System.Web.UI.UserControl
{           
    public bool FontBold { get; set; }

    protected void Page_Load(object sender, EventArgs e)
    {
        if (FontBold)
            lblText.Font.Bold = true;
    }


}

1 Ответ

1 голос
/ 04 января 2011

У меня нет возможности проверить прямо сейчас, но мне кажется, что свойство FoldBold должно быть помечено атрибутами Personalizable (), WebBrowsable ().

...