为什么在.aspx页面中无法访问usercontrol中的控件?

时间:2017-07-15 22:30:57

标签: c# asp.net webforms user-controls radio-button

我创建了一个用户控件,里面有一个单选按钮。我还创建了一个类型单选按钮的公共属性,并为其分配了单选按钮,因此可以在后面的aspx页面代码中访问。

public partial class WebUserControl : System.Web.UI.UserControl
{
    public RadioButton radiobtn { get; set; }

    protected void Page_Load(object sender, EventArgs e)
    {
        initiateControls();
    }
    private void initiateControls() 
    {
        radiobtn = RadioButton1;
    }
}

现在我已将该用户控件拖入.aspx页面,并尝试访问用户控件中的单选按钮,但是引发了空引用异常'。

的.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="test.aspx.cs" Inherits="test" %>





<%@ Register src="UserControls/WebUserControl.ascx" tagname="WebUserControl" tagprefix="uc1" %>





<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>

        <uc1:WebUserControl ID="WebUserControl1" runat="server" />

    </div>
    </form>
</body>
</html>

的.cs

public partial class test : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack) 
        {
            try
            {


                WebUserControl1.radiobtn.Visible = false;
            }
            catch (Exception ex)
            {

                Response.Write(ex.Message);
            }
        }
    }
}

2 个答案:

答案 0 :(得分:1)

您应该实现get属性:

public RadioButton radiobtn
{
    get
    {
        return RadioButton1;
    }
}

答案 1 :(得分:0)

您页面Page_Load在控件的Page_Load之前运行。

此页面显示事件的顺序:

https://msdn.microsoft.com/en-us/library/ms178472.aspx

您可以访问LoadComplete或PreRender中的控件,但不能访问Page_Load