【问题标题】:Get parent page values from the usercontrol从用户控件获取父页面值
【发布时间】:2010-05-20 07:47:03
【问题描述】:

如何从用户控件中获取父页面值。 我在页面中有一个用户控件。单击用户控件按钮时,我想在执行方法后从页面中获取一些值。我需要我的用户控件中的这些值。在用户控件中获取页面结果的最佳方法是什么。

【问题讨论】:

    标签: c# asp.net delegates


    【解决方案1】:

    原始方式: 首次访问页面属性:

    http://msdn.microsoft.com/en-us/library/system.web.ui.control.page.aspx

    下一步您可以将 Page 属性转换为您的页面类型(无论它是什么),或者您可以使用 Page.FindControl 方法从其他控件中查找 Page 值。

    http://msdn.microsoft.com/en-us/library/31hxzsdw.aspx

    在很好的方式中,用户控件应该公开在单击此按钮时触发的事件,并且页面应该订阅此事件并将数据返回给控件。

    这就是你要找的吗?

    【讨论】:

    • +1 表示第二种方法。用户控件触发事件的方式是最好的方式,因为没有用户控件应该控制页面。该页面应该捕获该事件并为用户控件提供显示的必要信息。页面是控制器,用户控件只是视图。除此之外,当您的用户控件在不同页面中使用时,转换为页面的特殊类型无论如何都会失败。
    • 是的,这就是使用 UserControl 的全部意义所在。不幸的是,有些人更喜欢走捷径……
    【解决方案2】:

    您可以使用Page 属性来获取对页面对象的引用。但是,引用不是您的特定页面类的类型,因此您不能使用它来访问类中的特定成员而不先转换它:

    MySpecificPageClass page = (MySpecificPageClass)Page;
    

    现在您可以使用引用来访问该类的任何公共成员。页面中的控件通常被声明为受保护,因此您可能必须将其访问级别更改为公共才能从外部访问它们。

    【讨论】:

    • 如果用户控件在多个页面上(用户控件通常用于什么),则投射将失败。我更喜欢 Rafaels 第二种方法,用户控件为页面触发事件,然后从页面(包含引用)向用户控件提供必要的信息。
    • @Tim:好点子。对于设计用于不同页面的用户控件,方法当然是完全不同的。
    【解决方案3】:

    【讨论】:

    • 我终于找到了解决方案。我正在使用委托。现在我可以在做一些操作后从我的父页面获取值。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-02
    • 2015-04-30
    • 2011-06-29
    • 2010-09-20
    • 1970-01-01
    相关资源
    最近更新 更多