相关疑难解决方法(0)

ASP.NET C#静态变量是全局的吗?

今天我发布了一个小的asp.net beta网络应用程序,允许内部员工修改一些产品信息.我们开始遇到用户覆盖彼此产品信息的问题......即使每个工作人员正在编辑一个完全不同的行(产品).

经过一些谷歌搜索,我想我知道发生了什么,它与静态变量的使用有关,下面是一个快速粗略的问题示例:

// EditProductGroup.aspx.cs
public partial class EditProductGroup : System.Web.UI.Page
{

    private static int _groupId = 0;

    protected void Page_Load(object sender, EventArgs e)
    {
      _groupId = Convert.ToInt16(Request.QueryString["GroupID"]);

     // get existing ProductGroup information from database using 
     //_groupId to find the row and populate textboxes
    }

    private void saveProductGroupData()
    {
      // when user hits 'save changes' button, update row 
      //where the primary key column 'ProductGroupID' matches _groupId in the table
    }
}
Run Code Online (Sandbox Code Playgroud)

因此,根据我的研究,一个静态变量实际上存在于整个应用程序中,这意味着如果多个用户正在使用该应用程序,他们将有效地读取"_groupId"的相同"值",并且在某些情况下实际设置它导致页面的另一个用户"实例"将数据保存到错误的行(ProductGroupId).

我的意图是静态变量与其他用户隔离,并且不应该是 - 每个用户都有自己的页面实例,因此他们自己的'_groupId'变量实例.

幸运的是,这一切都发生在dev/staging数据库而不是live db上.我不确定是否只需要删除'static'关键字来停止每个人设置/读取的变量.

有什么想法吗?谢谢

c# asp.net variables static

20
推荐指数
2
解决办法
4万
查看次数

.NET中静态变量的生命周期

我有一个使用一些配置设置的扩展方法.我已经宣布这些为static.

public static class Extensions
{
    static string _mailServer = ConfigurationManager.AppSettings["MailServer"];
    // ... etc    

    public static void SendEmailConfirmation(this IOrder order) { }
}
Run Code Online (Sandbox Code Playgroud)

我只是想检查一下这是否符合我的意图,因为我并不是100%肯定.我的想法是,我不想继续阅读这些值,我希望它们能够被读取一次,并在Web应用程序的生命周期中进行缓存.这会发生什么?谢谢

.net c# static

10
推荐指数
1
解决办法
6700
查看次数

Asp.net静态可变生命周期刷新和PostBack

解决方法:

我已经声明了一个类级别的公共静态变量,并在ASP.NET 3.5的环境中使用值0初始化.在加载事件I中,该变量的增量为1

问题:

  1. 获得页面刷新后甚至Postback,我得到该变量的最新值.一个变量声明为STATIC,没有被页面刷新和Postback
  2. 我只是关闭浏览器并关闭VS 2008 IDE - 即使我重新打开,重新运行相同的Web应用程序,我得到最后一个递增值,而不是0.我想知道在关闭应用程序后这是如何可行的.

你能帮忙吗?

asp.net static

6
推荐指数
1
解决办法
6885
查看次数

asp.net mvc 4中静态类的替代方法是什么?

在这里看到静态类和静态函数是坏的,因为它们占用了大量内存.

我将它用于许多需要与数据库等交互的东西.

静态本地化类的一部分示例,即GetResources

public static class SFLocalization
{

    public static string GetResources(string key)
    {
          string CurrentLanguage = System.Threading.Thread.CurrentThread.CurrentUICulture.ToString();
          if (MemoryCache.Default["Resources_" + key] == null)
          {
          string x 
          using (Db _db = new Db())
            {
                MemoryCache.Default["Resources_" + key] = _db.Languages.First(l => l.Key == key && l.LanguageCode == CurrentThread).Value;
            }
          }
          return MemoryCache.Default["Resources_" + key];
    }
}
Run Code Online (Sandbox Code Playgroud)

然后在视图中,控制器等..我写这个来获取翻译的值

 @SFLocalization.GetResources("NewsletterBoxTitle")
Run Code Online (Sandbox Code Playgroud)

1.)那些情况下的静态课真的那么糟糕吗?

2.)替代方案是什么?也许依赖注入(ninject等..)?? (我在书中看到它Apress - Pro Asp.net Mvc 4

c# asp.net dependency-injection asp.net-mvc-3 asp.net-mvc-4

1
推荐指数
1
解决办法
3780
查看次数