Передача данных пользовательским компонентам в asp.net - PullRequest
0 голосов
/ 21 апреля 2009

Это .net 2.0 здесь, а не MVC, и я дерьмо на формах asp.

У меня есть страница с пользовательскими элементами управления. Когда я нажимаю на что-то на странице, я хочу загрузить пользовательский контроль на основе параметра со страницы.

Я не могу этого сделать.

В моей странице 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, который происходит из дерева, которое я успешно получил в методе SelectedNodeChanged. Я не могу получить ошибку в контроле дефектов.

Ответы [ 2 ]

2 голосов
/ 21 апреля 2009

Это связано с жизненным циклом страницы ASP.NET. К тому времени, когда срабатывает событие click, событие init элемента управления уже произошло.

Чтобы лучше помочь вам, предоставьте более подробное объяснение того, что такое элемент управления FaultTree, каков желаемый результат и какой-то пример кода.

UPDATE:

Вместо открытого свойства вы можете просто создать в элементе управления открытый метод, который выполняет желаемое действие, и вызывать его из FaultTree_SelectedNodeChangeEvent.

Пример (для открытого метода с именем Refresh):

_DefectDetail.Refresh(object data);
0 голосов
/ 21 апреля 2009

В основном вы должны использовать 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...