Использование макета JQuery в ASP.NET UpdatePanel - PullRequest
2 голосов
/ 22 января 2010

У меня есть сайт ASP.NET с вложенными мастер-страницами, которые используют функцию .layout () в jquery.layout.js.

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

Однако я хотел бы устранить «мерцание», которое я получаю на PostBack, поэтому хотел бы представить ASP: UpdatePanel.

Я пытался окружить все в форме на корневой главной странице ASP: UpdatePanel, после чего все мое прекрасное форматирование исчезло, и мои страницы выглядели беспорядочно. Кажется, я полностью потерял панель изменения размера, и теперь появился мой ui-layout-center внизу экрана.

Моя главная страница похожа на следующую:

<body id="body">
    <form id="BaseForm" runat="server">
    <asp:ScriptManager ID="ScriptManager1" runat="server">
    </asp:ScriptManager>
    <asp:UpdatePanel ID="updPanel" runat="server" UpdateMode="Conditional">
        <ContentTemplate>
            <div class="ui-layout-north banner">
              etc etc
               '
               '
        </ContentTemplate>
    </asp:UpdatePanel>
    </form>
</body>

Я использую следующий скрипт для форматирования своих страниц:

            $(document).ready(function() {
            var myLayout;

            // myLayout = $('body').layout(); -- syntax with No Options
            myLayout = $('#body').layout({

                // enable showOverflow on north-pane so popups will overlap other panes
                north__showOverflowOnHover: false
                // some resizing/toggling settings
      , north__spacing_open: 0
  // no resizer-bar when open (zero height)
      , north__spacing_closed: 0  
// big resizer-bar when open (zero height)
      , south__spacing_open: 0
      , south__spacing_closed: 0
      , east__spacing_open: 0
      , east__spacing_closed: 0
      , south__minSize: 40
      , east__maxSize: 10
      , north__minSize: 80
      , west__minSize: 300
      , west__maxSize: 600
            });
        });

Стили следующие:

    .ui-layout-pane { /* all 'panes' */
    background: #FFF;
    border: 0px solid #fff;
    padding: 10px;
    overflow: auto;
}
.ui-layout-north {*overflow:hidden;}
.ui-layout-south {padding:0px;}
.ui-layout-east {padding:0px;}
.ui-layout-west {
    margin-bottom:10px !important;
    margin-left:10px !important; 
    border-right: solid 10px transparent;
    padding-top:0px;
    padding-right:0px;
    padding-bottom:0px;
    background:#f2f2f3;
    border-left:1px solid red;
    border-bottom:1px solid red;
}
.ui-layout-center {
    padding: 0px !important; 
    margin-right:10px !important; 
    margin-bottom:10px !important;
    background:#f2f2f3;
    border-right:1px solid red;
    border-bottom:1px solid red;
}
.ui-layout-resizer { /* all 'resizer-bars' */
    background: #fff;
}
.ui-layout-resizer-west {
    background:#efefef;
    border-bottom:1px solid red;
}

.ui-layout-toggler { /* all 'toggler-buttons' */
    background: #111;
}

Я пробовал разные способы регистрации моего скрипта - Регистрация этого скрипта с помощью ClientScript.RegisterClientScriptInclude - используя pageload () - используя Sys.WebForms.PageRequestManager.getInstance (). add_endRequest

Я уверен, что скрипт работает нормально, так как я добавил предупреждение («Пожалуйста, работайте!»); и предупреждение отображается. Так что что-то еще мешает рендерингу.

У кого-нибудь есть идеи?

Ответы [ 3 ]

1 голос
/ 22 января 2010

Быстрое предложение от макушки головы:

Если ваш макет поврежден дополнительным тегом div, отображаемым панелью обновлений - можете ли вы просто заменить его в верхнем уровне div вместо окружения?

<asp:UpdatePanel ID="updPanel" runat="server" 
      UpdateMode="Conditional" CssClass=""ui-layout-north banner">
        <ContentTemplate>
              etc etc
               '
               '
        </ContentTemplate>
    </asp:UpdatePanel>
0 голосов
/ 25 января 2010

Исправление простое, вам просто нужно обновить значения по умолчанию "jquery.layout.js", чтобы разрешить вложенный контент.

сначала добавьте родительский контейнер, он может находиться внутри панели обновления, см .:

<asp:UpdatePanel ID="UpdatePanel" runat="server">
  <ContentTemplate>
    <div id="ui-wrapper">

помните ближе:

    </div>
  </ContentTemplate>
</asp:UpdatePanel>

затем обновите параметры скрипта (Вы можете сделать это в бите "myLayout"):

, north__paneSelector: "#ui-wrapper .ui-layout-north" 
, south__paneSelector: "#ui-wrapper .ui-layout-south"
, east__paneSelector: "#ui-wrapper .ui-layout-east"
, west__paneSelector: "#ui-wrapper .ui-layout-west"
, center__paneSelector: "#ui-wrapper .ui-layout-center"

Надеюсь, это поможет

Chris

0 голосов
/ 22 января 2010

Попробуйте зарегистрировать файл javascript в менеджере сценариев.

Например:

<asp:ScriptManager ID="SMgr" runat="server">
  <Scripts>
    <asp:ScriptReference path="MyScript.js" />
  </Scripts>
</asp:ScriptManager>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...