我有一个 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/