0

我有一个 C# 网站,它有一个用户控件,我在用户控件的顶部初始化了一系列私有变量:

using System.IO;

namespace FF.Core
{

    public partial class _Job : System.Web.UI.UserControl
    {
        private static long _JobID = 0;
        private static string _JobNumber = String.Empty;

我已将此用户控件拖到 .aspx 页面上,标记如下:

<%@ Register Src="_Job.ascx" TagName="_Job" TagPrefix="uc1" %>

<uc1:_JobDataEntry ID="_Job" runat="server" />

我的应用程序将启动包含此用户控件的多个页面。似乎在第一个实例启动后,用户控件没有重新初始化,即_JobID 没有设置回0,而是包含先前加载的_JobID 的值。我有这样的印象,因为我正在启动一个新页面,_JobID 将被设置回 0。我可以在页面加载时初始化我的变量,但我想了解为什么会发生这种情况并了解重用用户控件的最佳方法。我的每个新页面都在新的浏览器窗口“target=_blank”中启动

谢谢 !

4

1 回答 1

1

你有静态变量,只要你的网络应用程序正在运行,它们就会保持它们的状态。静态变量在给定类的所有实例之间共享。这适用于诸如 winforms 之类的东西,但不适用于 Web 应用程序。通常避免在 Web 应用程序和 Web 服务以及将由 Web 应用程序/服务使用的类库中使用静态变量。

只需将它们设为私有非静态变量。并在您的应用程序中搜索静态变量,并将它们转换为实例变量(除非您有充分的理由将它们保持为静态。

于 2012-07-10T21:15:59.953 回答