Я пытаюсь добавить 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;
}
}