Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Как обновить ajax updatepanel с помощью js? / 7 сообщений из 7, страница 1 из 1
01.12.2009, 22:04
    #36342124
Cheerful Calf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как обновить ajax updatepanel с помощью js?
Надо в функции OnClientclose() обновить аяксовую UpdatePanel. В функцию попадаю, она отрабатывает, но панель не обновляется. Хотя если тот же самый __doPostBack вызвать html'ной кнопкой - все работает. Как исправить?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title></title>
    <script type="text/javascript">
        function OnClientclose(sender, eventArgs) {
            var arg = eventArgs.get_argument();
            document.getElementById('TextBox1').value = arg;
            PageMethods.SetSessionCode(arg);
            var prm = Sys.WebForms.PageRequestManager.getInstance();
            __doPostBack('UpdatePanel1', '');
        }
        function Button1_onclick() {
            __doPostBack('UpdatePanel1', '');
        }
</script>
</head>
<body>
<form id="form1" runat="server">
    <div>
        <asp:ScriptManager 
            ID="ScriptManager1" 
            runat="server" 
            EnablePageMethods="true">
        </asp:ScriptManager>
        <br />
        <asp:UpdatePanel 
            ID="UpdatePanel1" 
            runat="server" 
            onunload="UpdatePanel1_Unload">
            <ContentTemplate>
                <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
            </ContentTemplate>
        </asp:UpdatePanel>
        <telerik:RadWindow 
            ID="RadWindow1" 
            runat="server" 
            NavigateUrl="spalvos.aspx" 
            Visible="False" 
            VisibleOnPageLoad="True" 
            OnClientClose="OnClientclose">
        </telerik:RadWindow>
        <input 
            id="Button1" 
            type="button" 
            value="button" 
            onclick="return Button1_onclick()" />
    </div>
</form>
</body>
</html>
...
Рейтинг: 0 / 0
01.12.2009, 22:20
    #36342134
ShSerge
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как обновить ajax updatepanel с помощью js?
Cheerful Calf,

Наверное, пора на форуме открывать ветку "коммерческие продукты для вэбформс аспнет". Уже сегодня кто-то про девэкспресс спрашивал. Теперь вот телерик.
Честно скажу и в том и в другом "чистых" хтмл-элементов нет. Есть контролы. Это - те же самые элементы или их группы, круто приправленные яваскриптом. Чтобы разобраться - firefox+firebug. Фиг его знает, как там это всё устроено. Как, например в OnClientClose передаются параметры, когда оно вызывается и т.д. .
...
Рейтинг: 0 / 0
01.12.2009, 22:23
    #36342137
Cheerful Calf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как обновить ajax updatepanel с помощью js?
Ну я же говорю - в функцию
Код: plaintext
1.
2.
3.
4.
5.
6.
        function OnClientclose(sender, eventArgs) {
            var arg = eventArgs.get_argument();
            document.getElementById('TextBox1').value = arg;
            PageMethods.SetSessionCode(arg);
            var prm = Sys.WebForms.PageRequestManager.getInstance();
            __doPostBack('UpdatePanel1', '');
        }
я попадаю и пейдж метод в шарпе
Код: plaintext
1.
2.
3.
4.
        [System.Web.Services.WebMethod]
        public static void SetSessionCode(string sCode)
        {
            HttpContext.Current.Session["_arg"] = sCode;
        }
отрабатывает правильно со всеми параметрами. Значит не работает только __doPostBack('UpdatePanel1', '');....
...
Рейтинг: 0 / 0
01.12.2009, 22:27
    #36342143
Cheerful Calf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как обновить ajax updatepanel с помощью js?
ShSergeКак, например в OnClientClose передаются параметры, когда оно вызывается и т.д. . из spalvos.aspx
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
<body>
    <form id="form1" runat="server">
        <script type="text/javascript">
        function GetRadWindow()
        {
            var oWindow = null;
            if (window.radWindow) oWindow = window.radWindow;
            else if (window.frameElement.radWindow) oWindow = window.frameElement.radWindow;
            return oWindow;
        }
        
        function CloseWithArg(str)
        {
           var customArg = str;
           GetRadWindow().close(customArg);
        }
        </script>
    <asp:Button ID="cmd_Closeradw" runat="server" Text="C L O S E" OnClientClick="Close()"/>
    <div>
   
        <asp:ListView ID="lv_spalvos" runat="server" EnableViewState="false">
        <ItemTemplate>
            <asp:ImageButton ID="ImageButton1" runat="server" 
             ImageUrl = '<%# "http://www."+Eval("sCode")+"_th.jpg" %>'
             OnClientClick= '<%# string.Format("CloseWithArg(\"{0}\");return false;", Eval("sCode")) %>' />
             <br />
        </ItemTemplate>
        <LayoutTemplate>
                <div ID="itemPlaceholderContainer" runat="server" style=""></div>
                <span ID="itemPlaceholder" runat="server"></span>
        </LayoutTemplate>
        </asp:ListView>
    </div>
    </form>
</body>
...
Рейтинг: 0 / 0
02.12.2009, 10:12
    #36342601
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как обновить ajax updatepanel с помощью js?
Когда Вы провалились в SetSessionCode, обновление элементов станицы уже невозможно, все события по рендерингу отработаны.

Но есть такой финт ушами - ручной рендеринг через js: нам поможет ICallbackEventHandler

Вот пример для обновления грида:


Код: plaintext
1.
2.
3.
4.
5.
<script type="text/javascript">
    function ShowResult(eventArgument,context)
    {
        window.document.getElementById('Gridview').innerHTML = eventArgument;
    }
</script>

Грид кидаем в див:

Код: plaintext
1.
2.
3.
4.
5.
<div id="Gridview">
        <asp:GridView EnableViewState="false" runat="server" ID="_grid" OnRowDataBound="_grid_RowDataBound"
            AllowPaging="True">
        </asp:GridView>
        <br />
    </div>

Теперь с сервера нам нужно упасть в функцию ShowResult:

Для этого нам нужно еще до вызова серверного постбека с клиента дернуть GetCallbackEventReference.

Код: plaintext
1.
2.
3.
4.
5.
<script type="text/javascript">
        function UpdateGrid(args)
        {
            <%= ClientScript.GetCallbackEventReference(this,"args", "ShowResult", null) %>;
        }
</script>

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
public string GetCallbackResult()
{
    return result;
}

public void RaiseCallbackEvent(string eventArgument)
{
     ... ///тут работаете с сервером   
    RenderGrid ...
}

Тут ручками рендерим грид в текстовую переменную result.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
private void RenderGrid(GridView _grid)
{ 
   using (StringWriter sw = new StringWriter())
    {
        HtmlTextWriter htw = new HtmlTextWriter(sw);
        _grid.RenderControl(htw);
        htw.Flush();
        result = sw.ToString();
    }
}
...
Рейтинг: 0 / 0
02.12.2009, 10:19
    #36342629
Cheerful Calf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как обновить ajax updatepanel с помощью js?
авторТут ручками рендерим грид в текстовую переменную result.
Это как я понимаю равнозначно моему ручному:
Код: plaintext
1.
2.
3.
        function UpdateMyPannel() {
            var prm = Sys.WebForms.PageRequestManager.getInstance();
            __doPostBack('UpdatePanel1', '');
        }
или
Код: plaintext
1.
2.
3.
protected void UpdateMyPannelFromServer()
{
  UpdatePanel1.Update();
}

? Если так, то не понимаю как узнать, что настал момент обновлять?
...
Рейтинг: 0 / 0
02.12.2009, 11:19
    #36342849
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как обновить ajax updatepanel с помощью js?
Ну по сути да. Только в UpdateMyPannelFromServer уже поздно что-то делать. Поэтому через js можно отрендерить.
...
Рейтинг: 0 / 0
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Как обновить ajax updatepanel с помощью js? / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]