c# - c# 中 asp.net 代码隐藏的变量作用域(希望是简单的!)

标签 c# asp.net scope

我有一个 asp.net 页面(C# 代码隐藏),在 page_load 中有各种返回匿名类型的 linq 查询,例如:

var customersAdded = from r in AddedRecords
                                 select new { Ref = r.CustomerRef, Name = r.Customer_Name };

在页面上,我有一个名为“导出到 Excel”的按钮,在该 buttonClick 事件中,我尝试引用customersAdded。它说它在上下文中不存在。我知道我过去已经使用以下方法克服了类似的问题:

if (File.Exists(System.Web.HttpContext.Current.Server.MapPath("~/App_Variants/" + GetUserTheme().ToString() + "/images/" + i.ImageUrl)))

但到目前为止还没有运气。

那么问题来了,如何引用变量呢?作为引用,如果我说想要引用控件中的值(例如页面上的文本框),是否会应用相同或不同的方法?

谢谢!

标记

最佳答案

看起来您刚刚将变量声明为 Page_Load 的局部变量。要在任何其他方法中引用该变量,它至少需要是该类的成员。当然,您使用的是匿名类型,并且类型本身也需要在范围内。

解决该问题的一种方法是在类中声明类型,可能只是作为内部结构。然后,该类型不再是匿名的,因此您可以自由地将类成员声明为新类型的集合。您可以在 Page_Load 中分配给该变量,然后在类中的其他位置访问该变量。

编辑:

我在评论中提到的各种“延迟加载”不是带有 lazy 关键字的语言功能,也不是涉及 yield 等的任何内容,但只是这样:

private IQueryable<AddedRecord> _customersAdded;

// make this public if you want to access outside the class
private IQueryable<AddedRecord> CustomersAdded
{
    get
    {
        if (_customersAdded == null)
        {
            // replace next statement with the query you need
            _customersAdded = AddedRecords.Where(something);
        }
        return _customersAdded;
    }
}

现在,如果您需要更多参数来执行此查询,您可以随时提前填充 _customersAdded。诚然,这是一个微不足道的例子。

关于c# - c# 中 asp.net 代码隐藏的变量作用域(希望是简单的!),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5346143/

相关文章:

c# - 是否有适用于 .Net 的良好图形(不是图表)可视化 API?

php - 需要澄清 __VIEWSTATE __EVENTVALIDATION __EVENTTARGET 、 __EVENTARGUMENT

ASP.NET 网络应用程序 - ORA-12154 : TNS:could not resolve the connect identifier specified

c# - 你调用的对象是空的。使用 TPM 设备客户端发送消息时

C#:带有数字和中间斜线的正则表达式

ASP.NET Web 服务器在 HTTPS 方面存在问题——仅限 Chrome

javascript - 仅在第一次尝试时成功删除弹出窗口可见性

variables - 有没有办法获取范围内变量的名称和值?

模板和非模板类的C++符号范围搜索顺序不同?

c# - 运算符 '!' 不能应用于 x 类型的操作数