如何从母版页中的用户控件获取子页面中的.net控件实例

时间:2009-11-19 15:53:42

标签: asp.net user-controls

我有称为购物车的用户控件。 我在母版页中使用过。 我想从子页面获取文本框值到用户控件。 是否可以从母版页上的“自定义用户控件”中的子页面访问控件?

3 个答案:

答案 0 :(得分:0)

我不完全确定你想要完成什么,但听起来想要从内容页面访问母版页中包含的用户控件的属性。

您可以在母版页中使用公共属性来公开用户控件的text属性。

public string ShoppingCartText {
    get { return ((TextBox)this.ShoppingCart.FindControl("TextBox1")).Text; }
    set { ((TextBox)this.ShoppingCart.FindControl("TextBox1")).Text = value; }
}

然后,您可以在内容页面中设置文本框的值。您可以通过Page.Master属性从内容页面访问母版页的属性。

Master.ShoppingCartText = "value"

答案 1 :(得分:0)

我所做的是通过后面代码中的公共函数访问母版页控件。

因此,在母版页的代码中,我会声明如下:

public string getTextBoxValue()
{
     return TextBox.Text;
}

答案 2 :(得分:0)

您可以通过控制树递归来查找页面中的任何控件。

以下是一些扩展方法,在解决方案的类文件中弹出此代码。

public static class ControlExtensions
{
        public static IEnumerable<Control> FindAllControls(this Control control)
        {
            yield return control;

            foreach (Control child in control.Controls)
                foreach (Control all in child.FindAllControls())     
                    yield return all;
        }

        public static Control FindControlRecursive(this Control control, string id)
        {
            var controls = from c in control.FindAllControls()
                           where c.ID == id
                           select c;

            if (controls.Count() == 1)
                return controls.First();

            return null;
        }
    }

然后在您的用户控件中使用。

TextBox whatYoureLookingFor = this.FindControlRecursive("theId") as TextBox;

if(null != whatYoureLookingFor)
    // whatever