我正在从此处(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上运行时有什么不同?
更新的代码:
由于您使用的是.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可能不是您的选择。