2015-03-10 1 views
2

У меня возникла проблема с загрузкой моего usercontrol слишком поздно на «пост-временной шкале», поскольку они загружаются в результате пользовательского события.как я могу вызвать обратную ссылку из кода?

В результате события нажатия кнопки на этом пользовательском контроле не срабатывают при первом щелчке (все последующие обратные вызовы обрабатываются только обработчиками событий для щелчка). Однако при втором щелчке (и, следовательно, втором после обратной стороне) обработчики событий работают нормально.

Как я могу вызвать второй пост-обратно автоматически сразу после того, как он только что закончил? Поэтому мой usercontrol загружается правильно.

По умолчанию Страница

public interface IEventProvider 
{ 
    void TriggerEvent(String path); 
} 


public partial class Default : System.Web.UI.Page, IEventProvider 
{ 
    private string LastLoadedControl 
    { 
     get 
     { 
      return Session[Paths.CURRENTCTRL] as string; 
     } 
     set 
     { 
      Session[Paths.CURRENTCTRL] = value; 
     } 
    } 

    private void LoadUserControl() 
    { 
     string controlPath = LastLoadedControl; 

     ContentPlaceholder.Controls.Clear(); 

     if (string.IsNullOrEmpty(controlPath)) 
      controlPath = Utils.Paths.USERCTRL_BASE + "Main.ascx"; 

     Control uc = Page.LoadControl(controlPath); 
     ContentPlaceholder.Controls.Add(uc); 
    } 

    protected void Page_Load(object sender, EventArgs e) 
    { 
     LoadUserControl(); 
    } 

    public void TriggerEvent(String path) 
    { 
     if (path.Equals("logout")) 
     { 
      Session.Clear(); 
      Session.Abandon(); 
      LastLoadedControl = null; 
     } 
     else LastLoadedControl = Paths.USERCTRL_BASE + path + ".ascx"; 
     LoadUserControl(); 
    } 
} 

UserControl код

protected void profileBtn_Click(object sender, EventArgs e) 
    { 
     Utils.Events.triggerRedirectPage(this.Page, "Login"); 
    } 

события Код

public static void triggerRedirectPage(Page p, String path) 
    { 
     IEventProvider eventProvider = p as IEventProvider; 
     if (eventProvider != null) 
      eventProvider.TriggerEvent(path); 
    } 
+1

Я думаю, вы пытаетесь исправить симптомы прослушиваемого кода, а не исправлять прослушиваемый код. Вы никогда не хотите иметь двойную обратную передачу. Если ваши события не подключены в первый раз, то исправьте это. –

+0

Я не знаю, как сортировать тайминги, чтобы usercontrol полностью загрузился. События всегда запускаются последним, что приводит к тому, что пользовательский контроль загружается слишком поздно в ходе операции. Как на главной странице можно обнаружить кнопку щелчка в usercontrol, а затем загрузить в другой пользовательский контроль в результате этого достаточно рано, чтобы она была полностью загружена. – colobusgem

+0

Вы можете использовать этот код в своем пользовательском элементе управления для вызова метода для родителя: 'this.Page.GetType(). InvokeMember (« MyMethodName », System.Reflection.BindingFlags.InvokeMethod, null, this.Page, новый объект [ ] {}); 'Тогда вы не полагаетесь на события. –

ответ

0

Вы можете добавить кнопку (или другой элемент управления) с AllowPostBack=true затем вызвать нажмите событие на этой кнопке ,

+0

триггер с использованием javascript? могу ли я также ввести __dopostback, используя скрипт запуска реестра? – colobusgem

Смежные вопросы