【问题标题】:Call function from code behind in Global.asax从 Global.asax 中的代码调用函数
【发布时间】:2013-04-05 04:18:14
【问题描述】:

如何从 Global.asax 中的 asp 页面(隐藏代码)访问控件或函数?

我将下面的代码用于后台任务,此代码每 60 秒检查一次新电子邮件,我想更新一个在 default.aspx 中显示新电子邮件计数的标签

void Application_Start(object sender, EventArgs e) 
{
    AddTask("CheckEmails", 10);
}

private void AddTask(string name, int seconds)
{
    OnCacheRemove = new CacheItemRemovedCallback(CacheItemRemoved);
    HttpRuntime.Cache.Insert(name, seconds, null, DateTime.Now.AddSeconds(seconds), Cache.NoSlidingExpiration,
    CacheItemPriority.NotRemovable, OnCacheRemove);
 }//addTask

 public void CacheItemRemoved(string k, object v, CacheItemRemovedReason r)
 {
    //Check New Emails and update label from .aspx
    AddTask(k, Convert.ToInt32(v));
 }//CacheItemRemoved

【问题讨论】:

  • 让它public static。不过,这听起来不是一个好的设计决策。
  • 你从哪里得到这个值namesecond
  • 来自 Application_Start

标签: asp.net global-asax


【解决方案1】:

为常用函数创建一个单独的类,放在app_code文件夹中,然后从Default.aspx和global.asax访问这个函数......

【讨论】:

  • 我可以从 Global 访问这个类,但不能从这个类访问 .aspx,只能从 .aspx.cs 访问类,这不好,因为我需要更新标签的文本
  • 你在类中创建了命名空间吗?
  • 我现在在课堂开始时添加namespace NAME,但无法访问它
  • 你的课! :) 使用您的命名空间。
【解决方案2】:

你为什么要这样做。请提供更多信息。
虽然您可以创建Default page 的对象并调用它的函数。
但是,如果这与页面无关,那么只有它是好的。

编辑 1

你不需要它从application start调用。
你可以在页面加载时调用这个函数(在登录页面后调用)。
您可以使用相同的键检查缓存中的现有值。
如果存在则不要修改缓存
否则将您的值放入缓存中。

【讨论】:

  • 你应该提供一些代码,比如默认页面(函数)中有什么,以及你想在全局页面的什么事件上调用它。
  • 如何从 Global now 更新 .aspx 中存在的 Label 文本
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-16
  • 2013-10-01
  • 1970-01-01
  • 2013-05-26
  • 2012-10-21
  • 2015-01-16
相关资源
最近更新 更多