Добавление ASP.net диалоговое окно control to jQuery отображается некорректно

#c# #asp.net #jquery-ui #jquery-ui-dialog

#c# #asp.net #jquery-пользовательский интерфейс #jquery-ui-dialog

Вопрос:

Привет, я видел довольно много подобных вопросов, но все они были решены путем добавления диалогового окна обратно в основную форму страницы. Это не решает следующую проблему:

В моем Aspx-файле я определил сегмент кода следующим образом:

     <asp:UpdatePanel runat="server" ID="RadAjaxPanel2" UpdateMode="always">
        <ContentTemplate>
            <div id="areaFilterDialog" runat="server">
            </div>
        </ContentTemplate>
    </asp:UpdatePanel>
  

и у меня есть следующий javascript / jquery для инициализации диалогового окна

  $("#areaFilterDialog").dialog({
                    bgiframe: true,
                    autoOpen: false,
                    resizable: false,
                    modal: true,
                    draggable: true,
                    closeOnEscape: true,
                    width: 630,
                    open: function (type, data) {
                        dialogOpen = true;
                        $(this).parent().appendTo("form");
                    }
                });
        });
  

который добавляет элемент диалогового окна в форму на родительской странице.

В файле .cs я добавляю содержимое к элементу следующим образом:

 var departmentCode = e.DepartmentCode;
var summaryType = e.SummaryType;
var summaryCode = e.SummaryCode;
var totalName = e.TotalName;
var view = this.TemplateControl.LoadControl(".\WebControls\FilteredAreaRadGrid.ascx") as FilteredAreaRadGrid;

using (var businessManager = new BusinessManager(new DALConnection(this.DalConnectionString)))
{
       view.DataSource = businessManager.GetData(departmentCode, summaryType, summaryCode, string.Empty);
       this.AreaFilterDialog.Controls.Add(view);
}
  

и я показываю диалоговое окно пользовательского интерфейса jQuery, зарегистрировав следующий сценарий запуска в ScriptManager:

  var script = string.Format("ShowAttendanceFilterPopup('{0}');", totalName);
 ScriptManager.RegisterStartupScript(
      this.Page,
      this.Page.GetType(),
      "tmp",
      string.Format("<script type='text/javascript'>{0}</script>", script),
      false);
  

который вызывает следующий javascript / jquery:

 function ShowAttendanceFilterPopup(summaryName) {
    $("#areaFilterDialog").data('title.dialog', summaryName);
    $('#areaFilterDialog').dialog("open");
    $('#areaFilterDialog').dialog("enable");
}
  

Проблема в том, что html, который должен был быть добавлен в диалоговое окно, на самом деле просто добавляется в начало страницы, а диалоговое окно вообще не отображается. Если я не добавлю элемент управления в диалоговое окно перед его отображением, диалоговое окно отобразится правильно.

Я пробовал это с тем, что я добавляю в настоящее время, то есть с UserControl, содержащим Telerik RadGrid, но также со стандартной кнопкой asp, и оба имеют одинаковое поведение.

У кого-нибудь есть какие-либо идеи относительно того, что я делаю неправильно или, что еще лучше, решение этой проблемы?

Большое спасибо,

Роб

Комментарии:

1. Вы используете firefox / firebug? Возможно, это поможет вам точно понять, что здесь происходит. Вы знаете, что процесс обновления div каким-то образом влияет на диалоговое окно — используя firebug, вы можете проверять DOM на каждом шаге и получать некоторое представление о том, что именно происходит.

2. да, он добавляется в div правильно, но стиль не применяется, даже если он приписан элементам.

Ответ №1:

Возможно, попробуйте:

 <div id="areaFilterDialog">
    <asp:UpdatePanel runat="server" ID="RadAjaxPanel2" UpdateMode="always">
        <ContentTemplate></ContentTemplate>
    </asp:UpdatePanel>
</div>
  

Я не использовал панели Telerik Ajax, но я предполагаю что-то вроде:

 using (var businessManager = new BusinessManager(new DALConnection(this.DalConnectionString)))
{
       view.DataSource = businessManager.GetData(departmentCode, summaryType, summaryCode, string.Empty);
       RadAjaxPanel2.Controls.Add(view);
}
  

Наличие div внутри AjaxPanel ContentTemplate и добавление к нему элемента управления view просто не кажется мне правильным.

Комментарии:

1. Вы не можете напрямую добавить коллекцию элементов управления объекта UpdatePanel, но если вы добавите его в коллекцию ContentTemplateContainer объекта Controls , это сработает! Спасибо 🙂

2. На самом деле, это не работает. Это работает при первом обновлении панели, но не будет обновлять ее снова (восстанавливаемые данные верны, просто они не обновляются). Есть идеи?

3. Мне нужно было сделать представление. DataBind(); после сброса свойства источника данных. Я все равно отмечу этот ответ как правильный, поскольку он составлял почти 90% исправления. Приветствия!

4. Рад слышать! Я Гимн. NET guy (грустно, потому что это своего рода осиротевший проект) — итак, я понял идею панелей ajax, но я их не использовал. Рад помочь даже немного.