radwindow не отображается в dotnetnuke

Я новичок в разработке модулей dotnetnuke.

Настройки: dotnetnuke 7 + модуль christoc, управление телериком ajax ui: Q2 выпуск 2. Я зарегистрировал пользовательский элемент управления Patientupdate.ascx в DNN. Внутри него у меня есть несколько элементов управления, то есть radgrid (ResultaatGrid) и radwindow, также как пользовательский элемент управления (но не зарегистрированный в DNN) с именем COVUserControl. radwindow вызывается внутри radgrid в режиме formit при нажатии кнопки.

фрагмент кода для radwindow (внутри файла пациентаupdate.ascx)

В radwindow я поместил пользовательский элемент управления (COVUserControl), а внутри пользовательского элемента управления я определил radgrid.

<telerik:RadWindow ID="COVWindow" Title="Editing record" Width="270"
        Height="540" VisibleOnPageLoad="false" Behaviors="Resize, Minimize, Close, Pin, Maximize, Move"
        Left="610" EnableShadow="true" runat="server" OnClientClose="refreshGrid" Modal="true">
    <ContentTemplate>
         <asp:Panel ID="Panel1" runat="server">
                <COVUC:COVUserControl runat="server" ID="COVUCID"/>
        </asp:Panel>
    </ContentTemplate>
</telerik:RadWindow>

В шаблоне редактирования у меня есть кнопка с именем (в файле пациентаupdate.ascx) и в коде пациентаupdate.ascx.cs.

в команде ResultaatGrid_Item у меня есть следующий код:

     protected void ResultaatGrid_ItemCommand(object sender, GridCommandEventArgs e)
    {
        if (e.CommandName == "COV")
        {
            GridEditableItem editedItem = e.Item as GridEditableItem;

            string pCperID = editedItem.GetDataKeyValue("cpersoon_id").ToString();
            COVWindow.Width = 500;
            COVWindow.Height = 250;
            COVUserControl COVUC1 = COVWindow.ContentContainer.FindControl("COVUCID") as COVUserControl;
            COVUC1.cPersoonID = pCperID;
            RadGrid COVGrid = COVUC1.FindControl("COVGrid") as RadGrid;
            string script = "function f(){$find(\"" + COVWindow.ClientID + "\").show(); Sys.Application.remove_load(f);}Sys.Application.add_load(f);";
            ScriptManager.RegisterStartupScript(this, this.GetType(), "key", script, true);
            COVGrid.Rebind();
        }

    }

Проблема в том, что radwindow не всплывает. (Я проверил всплывающее окно в host -> extension-> и разрешил всплывающие окна для модуля).

При отладке (прикреплении) я вижу, что Covgrid.rebind запускается, потому что он запускает источник данных radgrid, необходимый для сетки внутри COVUserControl.

Тот же код работает, всплывающее окно radwindow, когда НЕ модуль dotnetnuke. (просто пациентаupdate.aspx).

Я думаю, что следующие строки кода не срабатывают:

string script = "function f(){$find(\"" + COVWindow.ClientID + "\").show();     
Sys.Application.remove_load(f);}Sys.Application.add_load(f);";
ScriptManager.RegisterStartupScript(this, this.GetType(), "key", script, true);

person Henk    schedule 29.10.2014    source источник


Ответы (2)


Пытаться

ScriptManager.RegisterStartupScript(this.Page, this.Page.GetType(), "key", script, true);

У меня были некоторые проблемы при регистрации сценариев из пользовательских элементов управления или пользовательских элементов управления. Регистрация их через объект Page меня пока не подводила.

person rdmptn    schedule 04.11.2014

Я шел тем же путем, что и вы, с radwindow в DNN, и короткий ответ: не используйте Sys.Application.add_load в DNN, ему это совсем не нравится. Это связано с тем, что компонент не загружается через Sys.Application.add_init().
Вместо этого используйте pageLoad().

person tatigo    schedule 03.11.2014
comment
Я пробую следующий код, но безуспешно :-( function GetCOVWindow() { var wnd = $find(‹%=COVWindow.ClientID %›); wnd.open(); } В коде позади: string script = $(document ).ready(function() { GetCOVWindow();});; ScriptManager.RegisterStartupScript(this, this.GetType(), key, script, true); - person Henk; 03.11.2014
comment
$find — это ярлык для метода findComponent класса Sys.Application, который определен библиотекой Microsoft AJAX, чтобы найти компонент, а не html DOM, который может быть еще не готов. - person tatigo; 03.11.2014
comment
Мое предложение состоит в том, чтобы сначала заставить это работать в ascx, сделать какую-нибудь кнопку и попытаться открыть окно radwindow по клику клиента, если это сработает, переместите его в код программной части. - person tatigo; 03.11.2014
comment
События до Sys.Application.Load не могут гарантировать, что у вас будут объекты Sys.Component, созданные MS AJAX. - person rdmptn; 04.11.2014
comment
@rdmptn, то, что я сказал об использовании $find в document.ready, следует использовать в pageLoad. Почему понижение ответа? - person tatigo; 04.11.2014
comment
Я, наверное, что-то неправильно прочитал прошлой ночью. Я бы предложил редактировать ваши сообщения вместо того, чтобы добавлять последующие комментарии. - person rdmptn; 05.11.2014