gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 22:40:13 25 4
gpt4 key购买 nike

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

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

在页面上,我有一个名为“导出到 excel”的按钮,在该按钮单击事件中,我尝试引用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com