Кнопка на панели обновления выполняет полный постбэк? - PullRequest
1 голос
/ 17 марта 2009

Я следую простому примеру использования панели обновления здесь (http://www.asp.net/Ajax/Documentation/Live/tutorials/IntroductionUpdatePanel.aspx). За пределами панели обновления у меня есть другой элемент управления вводом html, который вызывает функцию javascript, которая отображает счетчик для пользователя в окно предупреждения. Простые вещи. Моя проблема заключается в том, что страница работает по-разному при запуске на IIS и на встроенном веб-сервере asp.net (cassini). При нажатии IIS кнопка на панели обновления вызывает полную обратную передачу, поэтому отображается счетчик. пользователю в функции js каждый раз сбрасывается после этого. под встроенным веб-сервером нажатие кнопки на панели обновлений ведет себя так, как я ожидал, и как я хочу, чтобы обновлялась только метка, чтобы счетчик клиентская сторона не сбрасывается.

.net 3.5 является целевой платформой, и я использую IIS 5.1.

Я видел сообщения в других местах, описывающие ту же проблему (http://forums.asp.net/t/1169282.aspx)

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Untitled Page</title>

    <script type="text/javascript">
    var count=0;
    function incrementCounter()
    {
        count ++;
        alert(count);
    }
    </script>
</head>
<body>
    <form id="form1" runat="server">
    <asp:ScriptManager ID="ScriptManager1" runat="server">
    </asp:ScriptManager>
    <asp:UpdatePanel ID="UpdatePanel1" runat="server">
        <ContentTemplate>
            <asp:Label ID="Label1" runat="server" Text="Panel Created"></asp:Label>
            <asp:Button ID="Button1" runat="server" Text="Button"     onclick="Button1_Click" />
        </ContentTemplate>
    </asp:UpdatePanel>

    <input type="button" id="Button2" value="JS Clicker" onclick="incrementCounter();" />
    </form>
</body>
</html>

Обновление:

Спасибо Crossbrowser за ваш ответ. Мой ответ займет много места в окне Добавить комментарий. Итак, следуя этому простому примеру здесь (http://www.asp.net/Ajax/Documentation/Live/tutorials/IntroductionUpdatePanel.aspx), вы можете видеть, что режим обновления не установлен на условный, поэтому я отразил эти изменения. Однако моя проблема все еще сохраняется. То есть, страница при работе на IIS вызывает полную обратную передачу. То есть индикатор загрузки в вашем браузере загружается, экран мерцает, счетчик на стороне клиента, который я обслуживал, теряется. Запуск кода на встроенном веб-сервере asp.net - нет. В этом суть моей проблемы. сталкивался с этой проблемой другими (http://forums.asp.net/t/1169282.aspx).

Итак, мой вопрос: что отличается при работе на IIS от встроенного asp.net?

Обновленный код:

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Untitled Page</title>

    <script type="text/javascript">
    var count=0;
    function incrementCounter()
    {
        count ++;
        alert(count);
    }
    </script>
</head>
<body>
    <form id="form1" runat="server">
    <asp:ScriptManager ID="ScriptManager1" runat="server">
    </asp:ScriptManager>
    <asp:UpdatePanel ID="UpdatePanel1" runat="server">
        <ContentTemplate>
            <asp:Label ID="Label1" runat="server" Text="Panel Created"></asp:Label>
            <asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" />
        </ContentTemplate>
    </asp:UpdatePanel>

    <input type="button" id="Button2" value="JS Clicker" onclick="incrementCounter();" />
    </form>


</body>
</html>

Ответы [ 5 ]

2 голосов
/ 19 марта 2009

Поскольку вы используете .NET Framework 3.5, я предполагаю, что вы используете Visual Studio 2008, и вы говорите, что ориентируетесь на IIS 5.1 для производственной платформы.

Локальный веб-сервер, который является частью Visual Studio 2008, основан на архитектуре IIS 6/7, а не IIS 5. Итак, чтобы ответить на ваш вопрос о том, что отличается от IIS по сравнению с локальным веб-сервером ... к сожалению В этом случае вы смешиваете яблоки и апельсины.

Вы ограничены IIS 5.1? ... т.е. мандатом клиента или какой-либо другой причиной. Если это не так, и вы разрабатываете с помощью Visual Studio 2008 (.NET Framework 3.5), вам действительно следует использовать IIS7 (или как минимум 6), поскольку у вас, скорее всего, не возникнет эта проблема.

Опять же, IIS7 может быть не вариант для вас.

1 голос
/ 17 марта 2009

Вы пытались использовать триггер? например,

<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
        <ContentTemplate>
            <asp:Label ID="Label1" runat="server" Text="Panel Created"></asp:Label>
            <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Panel Refresh" />
        </ContentTemplate>
        <Triggers>
            <asp:AsyncPostBackTrigger ControlID="Label1" EventName="Click" />
        </Triggers>
    </asp:UpdatePanel>
0 голосов
/ 18 марта 2009

В диспетчере IIS проверьте настройки «Страницы и элементы управления» для своего сайта. В частности, разделы «Состояние просмотра» и «Настройки». Похоже, они могут повлиять на то, как ваша страница взаимодействует с сервером и когда.

0 голосов
/ 18 марта 2009

Так как UpdateMode вашей UpdatePanel установлен в условный режим, вы должны указать триггер.

Кроме того, вы можете определить свойство ChildrenAsTriggers до true .

Справочник по UpdatePanel.UpdateMode

0 голосов
/ 17 марта 2009

Вы пытались использовать элемент <asp:Button runat="server"> вместо элемента HTML <input>?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...