Я не могу получить доступ к компоненту ASPxComboBox, когда он находится на обеих вкладках ASPxPageControl
Я не могу получить доступ к компоненту ASPxComboBox, когда он находится в ASPxPageControl на обеих вкладках. Поэтому я добавил эту функцию в ClientSideEvents с помощью string.Format:
function(s, e) {{
if (window['{1}']) {{
{0}.SetSelectedItem(
{0}.FindItemByText(
{2}.GetText()
)
);
{0}.Focus();
{3}.PerformCallback(
{0}.GetSelectedItem().value
);
}}
}}
И, запуская эту функцию сначала на одной вкладке, затем на другой, я получаю сообщение об ошибке:
Microsoft JScript runtime error: Unable to get value of the property 'SetSelectedItem': object is null or undefined
Почему так? Могу ли я как-нибудь получить доступ к этому списку после переключения вкладок?
Кстати, ASPxPopupControl появляется на обеих вкладках, а затем открывается..
Больше контекста:
0 is ASPxClientControl.GetControlCollection().Get('<%=ASPxComboBox_Views.ClientID%>'), (compiles to ctl00_ctl00_ASPxSplitter_Main_ContentPlaceHolderMain_ContentProgramMain_ASPxRoundPanelMain_ASPxPageControl_Main_ASPxCallbackPanel_Redagavimas_ASPxCallbackPanel_RedagavimasGrid_GridLayout_Redagavimas_ASPxPopupControl_Layout_ASPxCallbackPanel_Views_ASPxComboBox_Views )
1 is ASPxClientControl.GetControlCollection().Get('<%=ASPxComboBox_Views.ClientInstanceName%>'), (compiles to cbViews )
2 is ASPxClientControl.GetControlCollection().Get('<%=GetClientStr(ASPxHyperLink_Desc.ClientID%>'), (compiles to ctl00_ctl00_ASPxSplitter_Main_ContentPlaceHolderMain_ContentProgramMain_ASPxRoundPanelMain_ASPxPageControl_Main_ASPxCallbackPanel_Redagavimas_ASPxCallbackPanel_RedagavimasGrid_GridLayout_Redagavimas_ASPxHyperLink_Desc )
3 is ASPxClientControl.GetControlCollection().Get('<%=ASPxCallbackPanel_Menu.ClientID%>'), (compiles to ctl00_ctl00_ASPxSplitter_Main_ContentPlaceHolderMain_ContentProgramMain_ASPxRoundPanelMain_ASPxPageControl_Main_ASPxCallbackPanel_Redagavimas_ASPxCallbackPanel_RedagavimasGrid_GridLayout_Redagavimas_ASPxPopupControl_Layout_ASPxCallbackPanel_Menu )
И это не работает, если ASPxComboBox_Views находится на вкладке ASPxPageControl. Если быть точным, моя страница выглядит так:
<..>
<dx:ASPxPageControl ID="ASPxPageControl_Main">
<TabPages>
<dx:TabPage><..>
<dx:ASPxGridView ID="ASPxGridView_Naudojimas">
//From here starts partial page which is one for both tabpages
<dx:ASPxPopupControl ID="ASPxPopupControl_Layout">
<ContentCollection>
<dx:PopupControlContentControl ID="PopupControlContentControl_Layout">
<div><table><tr><td align="left" width="100%">
<dx:ASPxCallbackPanel ID="ASPxCallbackPanel_Views">
<PanelCollection>
<dx:PanelContent ID="PanelContent1">
<dx:ASPxComboBox ID="ASPxComboBox_Views" runat="server" ...>
</dx:TabPage>
<dx:TabPage><..>
<dx:ASPxGridView ID="ASPxGridView_Redagavimas">
//From here starts partial page which is one for both tabpages
<dx:ASPxPopupControl ID="ASPxPopupControl_Layout">
<ContentCollection>
<dx:PopupControlContentControl ID="PopupControlContentControl_Layout">
<div><table><tr><td align="left" width="100%">
<dx:ASPxCallbackPanel ID="ASPxCallbackPanel_Views">
<PanelCollection>
<dx:PanelContent ID="PanelContent1">
<dx:ASPxComboBox ID="ASPxComboBox_Views" runat="server" TextField="Description" ValueField="FullName" ClientInstanceName="cbViews" TextFormatString="{0}">
(deleted some properties just to be easier to read here)
1 ответ
Вы должны установить ClientInstanceName всех элементов управления, которые вы используете на стороне клиента.
<dx:ASPxCallbackPanel ClientInstanceName="cbPanel1" ...>
<dx:ASPxHyperLink ClientInstanceName="hyperlink1" ..../>
а потом:
function(s, e) {{
if (window.{0}) {{
{0}.SetSelectedItem(
{0}.FindItemByText(
{1}.GetText()
)
);
{0}.Focus();
{2}.PerformCallback(
{0}.GetSelectedItem().value
);
}}
}}
где:
0 - поле со списком ClientInstanceName
1 - гиперссылка ClientInstanceName
2 - панель обратного вызова ClientInstanceName
И вы действительно должны посетить ссылки, опубликованные Ниранджаном.