Web控件是否可以编辑属于其父级的属性?

时间:2009-07-14 14:31:15

标签: asp.net vb.net controls webforms

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

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

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

3 个答案:

答案 0 :(得分:2)

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

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

然后,将Page属性强制转换为该接口并设置属性(ies) 例如(再次,这是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");
    }
}

答案 1 :(得分:0)

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

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

除非您使用Ajax,否则Codebehind事件通常会排队/延迟,直到发生回发为止。如果您使用的是Ajax,则可以重新呈现需要更改可见性的表单部分。

答案 2 :(得分:0)

我认为我不理解你的流程。当您单击网格中的编辑按钮时,究竟会发生什么?您的ItemCommand事件将触发,您可以找到编辑控件并使其可见,也可以加载它并使其可见。这是对的吗?

然后,在什么情况下编辑控件想要更改其父级的属性?