更新面板中的按钮是否正在完整回发?

时间:2009-03-17 14:11:01

标签: c# asp.net ajax iis

我正在关注如何使用此处的更新面板的简单示例(http://www.asp.net/Ajax/Documentation/Live/tutorials/IntroductionUpdatePanel.aspx)。在更新面板之外,我有另一个html输入控件,它调用一个javascript函数,在一个警告框中向用户显示一个计数。简单的东西。我的问题是,在IIS和内置的asp.net Web服务器(cassini)上运行时,页面的行为会有所不同。在IIS下单击更新面板中的按钮会导致完整的回发,因此每次都会在js函数中显示给用户的计数。在内置的Web服务器下点击更新面板内的按钮表现出我对它的期望以及我希望它如何只刷新标签,以便客户端的计数器不被重置。

.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 webserver上运行代码不会。这是我的问题的关键。我遇到过其他人(http://forums.asp.net/t/1169282.aspx)。

所以我的问题是,与内置的asp.net相比,在IIS上运行时会有什么不同?

更新代码:

<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 个答案:

答案 0 :(得分:2)

由于您使用的是.NET Framework 3.5,我将假设您使用的是Visual Studio 2008,并且您说您的目标是针对生产平台的IIS 5.1。

属于Visual Studio 2008的本地Web服务器基于IIS 6/7体系结构,而不是IIS 5.因此,回答您与IIS相比本地Web服务器的不同之处...不幸的是在这种情况下,你正在混合苹果和橘子。

您是否仅限于IIS 5.1?...即客户授权或其他原因。如果您不是,并且您正在使用Visual Studio 2008(.NET Framework 3.5)进行开发,那么您确实应该使用IIS7(或至少6个),因为您很可能没有这个问题。

同样,IIS7可能不适合您。

答案 1 :(得分:1)

您是否尝试使用触发器? e.g。

<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>

答案 2 :(得分:0)

由于您的UpdatePanel的 UpdateMode 设置为条件,因此您必须指定触发器。

或者,您可以将属性 ChildrenAsTriggers 定义为 true

UpdatePanel.UpdateMode reference

答案 3 :(得分:0)

在IIS管理器中,检查站点的“页面和控件”设置。 具体来说,是“查看状态和设置”部分。这些看起来可能会影响您的页面与服务器的交互方式以及何时。

答案 4 :(得分:-1)

您是否尝试使用<asp:Button runat="server">元素而不是HTML <input>元素?