这是一个困扰我几个月的问题。这似乎非常复杂,所以我举了一个非常简单的例子来演示它。
我有一个使用ASP .Net的网站,并使用IIS和SQL Server数据库托管在Microsoft服务器上。在本地服务器上调试或从服务器的内部访问时,该网站运行正常。
但是,每当我从客户端使用网站时(=在将其部署到远程服务器上时从我的计算机访问它),该网站的页面似乎每次都加载两次。含义:
因此,我做了一个网页,该网页托管在同一网站上,但与其他任何网页都不相关(也未使用Site.Master)。这是:
客户端代码:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="TestPostback.aspx.cs" Inherits="Rosalie.TestPostback" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Button runat="server" ID="btnTest" OnClick="btnTest_Click" Text="Test" />
</div>
</form>
</body>
</html>
服务器端代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.IO;
namespace Rosalie
{
public partial class TestPostback : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!Directory.Exists(Server.MapPath("Logs")))
Directory.CreateDirectory(Server.MapPath("Logs"));
StreamWriter sw = new StreamWriter(Server.MapPath("Logs/Trace.txt"), true);
sw.WriteLine(DateTime.Now + " " + getPostBackControlName() + " PageLoad\n");
sw.Flush();
sw.Close();
}
protected void btnTest_Click(object sender, EventArgs e)
{
if (!Directory.Exists(Server.MapPath("Logs")))
Directory.CreateDirectory(Server.MapPath("Logs"));
StreamWriter sw = new StreamWriter(Server.MapPath("Logs/Trace.txt"), true);
sw.WriteLine(DateTime.Now + " " + getPostBackControlName() + " ButtonEvent\n");
sw.Flush();
sw.Close();
}
// Method returning the ID of the control triggering the postback
private string getPostBackControlName()
{
...
}
}
如您所见,目标是每次调用服务器事件方法时都将其写入文件中,从而跟踪服务器行为。
现在,这是当我在本地服务器上运行此页面时,或者当我从发布服务器内部访问它时,只需单击一下测试按钮即可得到的结果文件:
02/10/2018 15:05:44 PageLoad
02/10/2018 15:05:46 btnTest PageLoad
02/10/2018 15:05:46 btnTest ButtonEvent
您可以看到页面已加载,然后通过单击按钮触发了回发并触发了相关事件。这是此网页的一种正常现象。
现在,这是从远程客户端计算机执行完全相同的步骤时的结果文件:
02/10/2018 15:36:19 PageLoad
02/10/2018 15:36:20 PageLoad
02/10/2018 15:36:28 btnTest PageLoad
02/10/2018 15:36:28 btnTest ButtonEvent
02/10/2018 15:36:28 btnTest PageLoad
02/10/2018 15:36:28 btnTest ButtonEvent
如您所见,Page_Load和btnTest_Clicked方法连续触发两次,就像每次调用服务器时网页都加载两次一样。
鉴于代码的简单性,我真的认为这与网站配置或服务器环境有关,但我并不是真正的专家。
我多次在Internet上搜索解决方案,花了数小时来尝试与纯编程有关的内容,但似乎没有任何解决方法。我渴望解决方案。谢谢!