将数据传递给asp.net中的用户组件

时间:2009-04-21 04:56:01

标签: asp.net controls viewstate

这里是.net 2.0,而不是MVC,我是asp表单的废话。

我有一个包含用户控件的页面。当我点击页面中的某些内容时,我想根据页面中的参数加载usercontrol。

我不能这样做。

在我的页面的FaultTree_Clicked中,我得到了值,然后:

  • 我尝试在上面展示一个属性 子用户控件来设置我在FaultTree_Clicked中设置的值, 它被遗忘了。

  • 我尝试将其保存到 会话[“mykey”],并加载 控件中的会话[“mykey”] Page_init ...值为空。

  • 我尝试将其保存到 ViewState [“mykey”],并加载 控件中的ViewState [“mykey”] Page_init ...值为空。

编辑:更具体的信息:

以下是页面(MyFault)的缩减版本:

<form id="form" runat="server">
 <div id="faulttree">
   <asp:TreeView ID="FaultTree" ......>
 </div>
 <uc1:_DefectDetail ID="DefectDetail" runat="server" Visible="true" EnableViewState="true" />
</form>

“FaultTree_SelectedNodeChanged()”背后的页面代码有一个方法。

当遇到该方法时,我想加载/显示DefectDetail控件。 DefectControl需要一个faultid,它来自Tree,我成功地进入了SelectedNodeChanged方法。我不能把这个问题变成缺陷控制。

2 个答案:

答案 0 :(得分:2)

这与ASP.NET页面生命周期有关。当click事件触发时,控件的init事件已经发生。

为了更好地为您提供帮助,请提供有关FaultTree控件的详细说明,所需结果和示例代码。

<强>更新

您可以在控件中创建一个公共方法,而不是公共属性,该方法执行所需操作并从FaultTree_SelectedNodeChangeEvent调用它。

示例(对于名为Refresh的公共方法):

_DefectDetail.Refresh(object data);

答案 1 :(得分:0)

基本上你必须使用EventHandlers ....

        1. Add a event handler to your user control (I had a search bar UscSearchCriteriaBar1)      

        public event EventHandler CriteriaChanged;

        +


        private void InternalOnCriteriaChanged()
        {
        OnCriteriaChanged();
        }
        +
        protected virtual void OnCriteriaChanged()
        {
        // If there are registered clients raise event
        if (CriteriaChanged != null)
        CriteriaChanged(this, EventArgs.Empty);
        }
        +
        Example
        public int EmployeeID
        {
        get
        {
        f (Session["EmployeeID"] != null)
        {
        ViewState["EmployeeID"] = Convert.ToInt32(Session["EmployeeID"]);
        }
        if (ViewState["EmployeeID"] == null)
        ViewState["EmployeeID"] = 0;
        return int.Parse(ViewState["EmployeeID"].ToString());
        }
        set
        {
        ctlEmployee.SelectedValue = value.ToString();
        ViewState["EmployeeID"] = value;
        Session["EmployeeID"] = value;
        }
        }


        In your page or other control


        override protected void OnInit(EventArgs e)
        {
        InitializeComponent();
        UscSearchCriteriaBar1.CriteriaChanged += new EventHandler(this.CriteriaChanged);    
        base.OnInit(e);
        }

        private void CriteriaChanged(object sender, EventArgs e)
        {
        try
        {
RefreshData();
        }
        catch (Exception ex)
        {
        ExceptionManager.Publish(ex);
        }
        }

    You can get UscSearchCriteriaBar1.EmployeeID

这段代码应该给你一些想法......已经完成了1.1应该在2上工作。