从子用户控件中访问父用户控件中的对象

4

我有一个用户控件,Parent.ascx:

<%@ Control Language="C#" AutoEventWireup="true" CodeFile="Parent.ascx.cs" 
    Inherits="Parent" %>
<%@ Register TagPrefix="cc" TagName="Child" Src="~/Child.ascx" %>

<asp:HiddenField ID="hfId" runat="server" />

<cc:Child ID="child1" runat="server" />

我的子控件Child.ascx包含一个按钮,在代码后端我想在该按钮的单击事件中访问隐藏字段hfId的值。
我不能使用用户控件属性并将其设置在Page_Load上,因为隐藏字段的值通过Parent.ascx控件中的jQuery事件而改变。

jQuery事件在响应已经写入到客户端之后改变了值。如果你想要在JavaScript客户端从控件中获取它的值,那么或许你可以在控件初始化时传递它的客户端ID或隐藏字段本身的引用。 - Yuriy Faktorovich
2个回答

3
使用以下代码从子控件中访问隐藏字段。 this.Parent 将给出父控件,使用 FindControl 按 ID 查找控件。
HiddenField hfID = this.Parent.FindControl("hfId") as HiddenField;
string hiddenvalue = hfID.Value;

如果在页面加载时更改隐藏字段的值,那么在按钮单击时,更新后的值会得到反映。


1
你可以从子元素中使用以下代码访问控件:

var hfId = (HiddenField)NamingContainer.FindControl("hfId");

我不喜欢这个解决方案,因为a. 如果他在谈论JavaScript执行后,这是没有意义的;b. 编辑页面的人永远不会知道他们还需要修改此控件。 - Yuriy Faktorovich

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接