小编典典

更新面板中的按钮正在执行完整的回发吗?

ajax

我正在从此处(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网络服务器上运行代码。那是我问题的症结所在。其他人(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>

阅读 211

收藏
2020-07-26

共1个答案

小编典典

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

属于Visual Studio 2008的本地Web服务器基于IIS
6/7体系结构,而不是IIS5。因此,回答您的问题是IIS与本地Web服务器相比有何不同…不幸的是,在此情况下,您正在混合苹果和橙子。

您是否受限于IIS 5.1?…,即客户端授权或其他原因。如果不是这样,并且您正在使用Visual Studio 2008(.NET Framework
3.5)进行开发,则实际上应该使用IIS7(或至少为6),因为您很可能不会遇到此问题。

同样,IIS7可能不是您的选择。

2020-07-26