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

原来的实现方法:

父页面aspx:

protected void Page_Load(object sender, EventArgs e)
    {
        try
        {
            if (!IsPostBack)
            {
                InitPage();
                LoadData();
                //Response.Write("<h3>首次加载</h3>");
            }
            else
            {
                //Response.Write("<h3>数据回发</h3>");
            }
        }
        catch (Exception ex)
        {
            ProcessException(ex, true);
        }
    }

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

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

用户控件ascx相关代码:

/// <summary>
    /// 项目编号
    /// </summary>
    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的赋值

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

这里获取到的用户控件中的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;

    /// <summary>
    /// 项目编号
    /// </summary>
    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;
        }
    }

这样设计就没此问题了

在微信小程序,如果你想根据全局变量的值来决定一个控件是否显示,你可以使用`wx:if`这个指令来实现条件渲染。`wx:if`指令可以通过判断表达式的值来决定是否渲染对应的控件。下面是一个基本的例子,展示了如何根据全局变量来控制控件的显示和隐藏。 首先,在小程序的全局数据定义一个变量,比如在`app.js`设置全局数据: ```javascript App({ globalData: { isComponentVisible: true // 默认值为true,表示控件是可见的 } }); ``` 然后,在需要显示或隐藏控件页面,你可以这样使用`wx:if`指令: ```xml <!-- 这是你的小程序页面的某个部分 --> <view wx:if="{{app.globalData.isComponentVisible}}"> 这是需要根据全局变量显示或隐藏的控件内容 </view> ``` 这里使用了`{{app.globalData.isComponentVisible}}`来获取全局变量的值,并将其作为`wx:if`的条件。当`isComponentVisible`为`true`时,`view`控件将会被渲染显示;当`isComponentVisible`为`false`时,`view`控件则不会被渲染,从而实现隐藏效果。 要改变控件的显示状态,你可以在小程序的任何地方修改全局变量的值,例如在某个事件处理函数: ```javascript // 假设这是某个按钮的点击事件处理函数 function toggleComponentVisibility() { const app = getApp(); app.globalData.isComponentVisible = !app.globalData.isComponentVisible; } ``` 每次点击按钮时,这个函数都会被调用,`isComponentVisible`的值会取反,从而控制控件的显示和隐藏。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值