如何在父页面获取用户控件中的某个变量值

原来的实现方法:

父页面aspx:

protected void Page_Load(object sender, EventArgs e)
    {
        try
        {
            if (!IsPostBack)
            {
                InitPage();
                LoadData();
                //Response.Write("

首次加载

"); } else { //Response.Write("

数据回发

"); } } catch (Exception ex) { ProcessException(ex, true); } }

其中LoadData方法中实现了对用户控件的初始化并给ProjectCode赋值

this.AuctionRent1.InitControl();
LogHelper.Info("InitBidding1 projectcode:" + this.AuctionRent1.ProjectCode);
AuctionRent1是用户控件的id值。

用户控件ascx相关代码:

/// 
    /// 项目编号
    /// 
    public string ProjectCode
    {
        get;
        set;
    }

public void InitControl()
    {
        if (this.State == "edit")//可操作的
        {
            LoadData(true);
            EyeableDiv.Visible = false;
            OperableDiv.Visible = true;
        }
        else if (this.State == "view")//可见的
        {
            LoadData(false);
            OperableDiv.Visible = false;
            EyeableDiv.Visible = true;
        }
        else
        {
            this.Visible = false;
        }
       
         
        
    }

initcotrol方法中LoadData实现了对ProjectCode的赋值

如何在父页面获取用户控件中的某个变量值_第1张图片

 这种设计我在aspx页面的按钮事件中却获取不到ProjectCode的值

如何在父页面获取用户控件中的某个变量值_第2张图片

这里获取到的用户控件中的ProjectCode值为空。通过分析发现

this.AuctionRent1.InitControl();
LogHelper.Info("InitBidding1 projectcode:" + this.AuctionRent1.ProjectCode);

在这里是可以获取到用户控件中projectCode的值。但是在btnAddDtl_ServerClick按钮事件中却获取不到值。这是因为此时处于数据回发状态。数据回发时ProjectCode只有初始值null。并未赋值。若要改变此状况,使用viewstate对ProjectCode的get和set方法进行改造,可避免此问题。使其可以在按钮事件中能正确获取rojectCode值

private string _ProjectCode = string.Empty;

    /// 
    /// 项目编号
    /// 
    public string ProjectCode
    {
        get
        {
            if (_ProjectCode == string.Empty)
            {
                if (this.ViewState["_ProjectCode"] != null)
                    return this.ViewState["_ProjectCode"].ToString();
                return "";
            }
            return _ProjectCode;
        }
        set
        {
            _ProjectCode = value;
            this.ViewState["_ProjectCode"] = value;
        }
    }

这样设计就没此问题了

你可能感兴趣的:(C#,用户控件)