【问题标题】:get List<CustomClass> from Page to User Control从页面获取 List<CustomClass> 到用户控件
【发布时间】:2011-10-01 20:29:13
【问题描述】:

我的页面代码后面有一个自定义类列表:

public List<Category> Categories = new List<Category>();

现在,我在该页面上还有一个用户控件,应该显示该列表。

如何从用户控件访问列表, 或者,我可以直接在页面的用户控件中创建一个列表吗?

我的用户控制代码隐藏:

public List<Category> Categories = new List<Category>();
protected void Page_Load(object sender, EventArgs e)
{

}

public class Category
{
    public string category_id { get; set; }
    public string category { get; set; }
}

我的页面代码隐藏:

public List<Category> Categories = new List<Category>();
protected void Page_Load(object sender, EventArgs e)
{
    Category MyCategory = new Category();
    MyCategory.category_id = 1;
    MyCategory.category = "sample";
    Categories.Add(MyCategory);
}
public class Category
{
    public string category_id { get; set; }
    public string category { get; set; }
}

【问题讨论】:

  • 您是否有两次声明Category 类,一次在页面中,一次在用户控件中?
  • 是的,因为我应该通过相同的方式。
  • 这是否意味着它们在不同的命名空间中?
  • 因为一个在_default下,另一个在_userControl下,那么是的,它们是。
  • 你为什么不把它放在一个中心位置并在两个地方都使用它而不是有两个完全相同的类?尝试 Hasan 的答案时出现强制转换异常的原因是列表和您分配给它的变量的类型不同。

标签: c# list user-controls


【解决方案1】:

在您的用户控件中创建一个属性并将列表分配给该属性

MyUserControl.ListProperty = theList;

将列表作为公共属性放在页面中,并通过用户控制中的页面属性访问它。您需要先将其转换为您的页面类型。

var theList = ((MyPage)Page).ListProperty

将列表放入 HttpContext.Current.Items 并从那里获取。

HttpContext.Current.Items["theList"] = theList;

【讨论】:

  • 在做你的第一个建议时,我得到“无法实现转换..”
  • 在第二个示例中,我无法通过 Page.Categories 访问列表,即使您看到它在页面中被定义为公共。
  • @domentic 您可能会在设置之前访问列表。检查事件的顺序
【解决方案2】:

自从哈桑汗开始帮助我, 但从未回答我的额外问题...我必须找到自己的解决方案。

我最后这样做的方式不是将项目添加到页面上的列表中, 像这样直接将它们添加到用户控件中:

filterControl.Categories.Add(new widgets_filter.Category{ category_id = "", category = ""});

我不知道这是否是一个好的解决方案,但至少它有效。

如果有人会提供更好的答案(带有示例代码),我会尝试使用它们,同时,这就是我所拥有的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-21
    相关资源
    最近更新 更多