【问题标题】:Can a web control edit properties belonging to its parent?Web 控件可以编辑属于其父级的属性吗?
【发布时间】:2009-07-14 14:31:15
【问题描述】:

我有一个.aspx 页面,它加载了三个独立的.ascx 控件来表示添加、编辑和列出对象。它目前只是简单地交换可见性并启用/禁用控件以在页面之间切换。

但是,在列出对象时(在网格视图中),我们会在每个对象旁边提供基本的“编辑”按钮。显然,单击它会为该用户加载编辑控件。此功能存在于控件内部,而不是父页面。

是否可以根据子控件中发生的事件修改父控件的属性? (例如,更改可见性并启用/禁用其他子控件)

【问题讨论】:

    标签: asp.net vb.net controls webforms


    【解决方案1】:

    是的,你可以。我们在 C# 项目中成功地做到了这一点;我认为同样的事情也适用于 vb.net。

    每个用户控件都有一个名为 Page 的属性,该属性引用它所在的页面。创建一个接口,该接口公开您要更改的属性或您要调用的方法。让承载用户控件的每个页面实现该接口。显然,实现应该会影响页面上的正确控件。

    然后,将 Page 属性类型转换为该接口并设置您的属性。
    例如(同样,这是 C#,不确定 VB.Net 的等价物是什么):

    interface IUpdatePage {
        void ChangeButton(String toValue);
    }
    
    public class MyPage : Page, IUpdatePage {
        public void ChangeButton(String toValue) {
            // do something interesting
        }
    }
    
    public class MyUserControl : UserControl {
        public void UpdateParent() {
            var pageLink = (Page as IUpdatePage);
            pageLink.ChangeButton("some value");
        }
    }
    

    【讨论】:

    • 很有趣,我去看看!
    • 注意,这显然都是服务器端的。罗伯特哈维似乎有一个客户端解决方案。
    • 我无法找到 Page 类的任何元素来完成此操作。您是否偶然访问了属于 Page 类的 Parent 类?
    • Page.Form.Controls.Item(1).Controls.Item(AN_INTEGER).ID 给了我一些反馈。然而,这奇怪的是不可预测的。在 0 时,什么都不是。在 1 时,它是第一个控件。 2点,什么都没有。 3是第二个控件,等等。嗯。
    • 没有。您的网页应该实现该接口。用户控件应将其 Page 属性类型转换为该接口。该页面将确定要更新的控件。
    【解决方案2】:

    我想我不明白你的流程。当您单击网格中的编辑按钮时,究竟会发生什么?您的 ItemCommand 事件触发,您要么找到编辑控件并使其可见,要么加载它并使其可见。对吗?

    那么,编辑控件在什么情况下要改变其父级的属性呢?

    【讨论】:

    • 当我单击网格中的编辑按钮时,它将保存该行的 ID,在 list.ascx 控件上禁用并将可见性设置为 false,然后使用来自行 ID 的信息。
    【解决方案3】:

    可以在浏览器中使用 Javascript 或 JQuery 完成。

    document.getElementById("myID").style.visibility="visible";
    document.getElementById("myID").style.visibility="hidden";
    

    除非您使用 Ajax,否则代码隐藏事件通常会排队/延迟,直到发生回发。如果您使用的是 Ajax,则可以重新渲染表单中需要更改可见性的部分。

    【讨论】:

    • 这可能很有用!我会测试一下。
    猜你喜欢
    • 2011-08-10
    • 2011-01-06
    • 2022-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-19
    • 2013-04-20
    • 1970-01-01
    相关资源
    最近更新 更多