2011-11-22 1 views
2

Je rencontre un problème étrange et je ne sais pas où chercher ou déboguer. J'ai une page parent A qui a un contrôle de zone de liste déroulante avec 7 provinces; Chaque province a un contrôle utilisateur (vue). Par défaut, l'index sélectionné est la province "SK" qui charge dans la même page un contrôle utilisateur View dynamiquement.Événement C# onClick sur ASP.NET Bouton non lancé initialement mais postsbacks ... et éventuellement déclenché après plusieurs clics

Ci-dessous mon code HTML et derrière la page parent

<telerik:RadComboBox ID="cmbProvince" runat="server" OnSelectedIndexChanged="cmbProvince_SelectedIndexChanged" AutoPostBack="true"> 
<Items> 
<telerik:RadComboBoxItem runat="server" Text="Quebec" Value="QC" /> 
<telerik:RadComboBoxItem runat="server" Text="Ontario" Value="ON" /> 
<telerik:RadComboBoxItem runat="server" Text="Saskatchewan" Value="SK" /> 
<telerik:RadComboBoxItem runat="server" Text="Manitoba" Value="MB" /> 
<telerik:RadComboBoxItem runat="server" Text="Yukon" Value="YT" /> 
<telerik:RadComboBoxItem runat="server" Text="Nuvanut" Value="NU" /> 
</Items> 
</telerik:RadComboBox> 

protected void Page_PreInit(object sender, EventArgs e) 
{ 
    MasterPage master = this.Master; 

    _currentProvince = GetCurrentOperatingProvince(IsPostBack); 
    cmbProvince.SelectedValue = _currentProvince; 
    txtReferenceNo.Text = "TECHLOS" + DateTime.Now.ToString("MMddyyyy-HHMMss"); 

    //Reload Dynamic Control on Every Page Creation 
    LoadDetailControl(); 
} 

private void LoadDetailControl() 
{ 
    UserControl ucPPSAControl = (UserControl)LoadControl(GetUserControlPath(_currentProvince)); 
    IPPSAView provView = ucPPSAControl as IPPSAView; 

    ApplicationContext.TargetProvince = _currentProvince; 

    PPSAPresenter presenter = new PPSAPresenter(provView, ApplicationContext); 
    provView.AttachPresenter(presenter, cmbProvince.SelectedValue, txtReferenceNo.Text); 

    phPPSAControl.Controls.Add(ucPPSAControl); 
} 

    protected void cmbProvince_SelectedIndexChanged(object sender, RadComboBoxSelectedIndexChangedEventArgs e) 
    { 
     phPPSAControl.Controls.Clear(); 
     _currentProvince = e.Value; 
     LoadDetailControl(); 
    } 

Dans chaque UC par province, il a un bouton de recherche avec un événement OnClick. La première fois que j'atterris dans la province par défaut, le bouton Rechercher fonctionne comme prévu et déclenche OnClick et le gestionnaire d'événement Search_Click est exécuté.

est inférieur à celui d'une UC typique pour chaque province

HTML button. 
<telerik:RadButton ID="btnSearch" runat="server" Text="Search" OnClick="Search_OnClick"> 
          </telerik:RadButton> 

and Code behind 

     protected void Search_OnClick(object sender, EventArgs e) 
     { 
      if (isValidSearchRequest()) 
      { 
       DisplayResultsFromResponse(presenter.Search()); 
      } 
      else 
      { 
       phResponse.Controls.Add(new LiteralControl(string.Format("<span style='color:red'>Invalid Search Request</span>"))); 
      } 
     } 

Maintenant, quand je change la province à « ON » (ou toute autre province a le même comportement), Lorsque je clique sur le bouton de recherche sur l'UC nouvellement générée, elle ne publie que sans déclencher l'événement OnClick. En cliquant deux fois, fait la même chose ... et la troisième fois, il déclenche le OnClick ... et a fonctionné comme d'habitude !!! Ce problème se produit si j'ai "ON" Voir la première fois qu'il charge et "SK" Voir (ou toute autre vue d'ailleurs) l'heure sencond, où je peux supposer quelque chose avec la création initiale de la vue le bouton fonctionne correctement ... mais le rechargement ultérieur d'un nouveau contrôle provoquera l'échec du OnClick.

Un autre point à noter, Une fois que je change la province, même si je reviens à la province d'origine, le Surclic ne fonctionnera pas ... Aussi j'utilise Telerik contrôle avec RadAjaxManager

Comment je peux déboguer cela pour savoir où est mon problème ... encore mieux comment puis-je résoudre ce problème?

+0

Je suis passé par votre code, je l'ai trouvé le problème est fondamentalement avec votre chèque de contrôle ajax pour votre panneau de mise à jour et ContentTemplate –

+0

peut vous s'il vous plaît être plus précis et comment je peux résoudre ceci? Désolé je viens de commencer à utiliser AJAX et Telerik ... donc c'est probablement le cas parce que parfois je viens d'essayer les contrôles sans comprendre pleinement les implications .. sur la façon dont je devrais l'utiliser. – Gotcha

Répondre

1

Après 3 jours passés sur ce ... il semble que le problème était lié au contrôle dynamique. Je l'ai créé sans assigner un ID ... donc sur la récréation, en quelque sorte il a posté quelques fois probablement parce qu'il utilisait l'ID généré par l'ASP et chaque fois ce n'était pas la même, mon onClick sur le bouton ne pouvait pas trouver le bouton qui l'a appelé à l'origine .. je suppose que la troisième fois, l'id est le même et c'est quand il l'a appelé correctement.

Quoi qu'il en soit, je sais que ce soit réglé le problème que j'avais

+0

Merci beaucoup! Cela m'a sauvé 2 jours :). Je n'ai passé qu'un seul jour et j'ai trouvé ta réponse! –

0

après l'endroit ScriptManager ce code

<telerik:RadAjaxManager ID="RadAjaxManager1" runat="server"> 
    <AjaxSettings> 
     <telerik:AjaxSetting AjaxControlID="RadAjaxManager1"> 
      <UpdatedControls> 
       <telerik:AjaxUpdatedControl ControlID="cmbProvince" /> 
       <telerik:AjaxUpdatedControl ControlID="btnSearch" /> 
      </UpdatedControls> 
     </telerik:AjaxSetting> 

    </AjaxSettings> 

peut vous aider à

+0

Je n'ai pas ce contrôle AjaxControlID = "cboAreasOfConcern" ... Pouvez-vous expliquer votre logique ici? Je comprends que c'est ce que vous spécifiez dans telerik Ce qui devrait être ajaxifié ... le contrôle qui devrait être ajaxifié dans votre solution est basé sur un contrôle "cboAreasOfConcern" ... mais je ne l'ai pas et les contrôles Updates devraient être le cmbProvince et btnSearch ... ce que je comprends cependant, le cmbProvince est trouvé dans la page d'appelant (qui elle-même est dans une page principale) et le btnSearch est dans le contrôle d'utilisateur. – Gotcha

+0

comme vous l'avez mentionné plus tôt vous utilisez le gestionnaire Ajax et vous devez avoir le panneau de mise à jour ici je suppose que votre identifiant ajaxupdatepanel est cboareaofconceren –

+0

J'utilise un proxy puisque le gestionnaire est défini dans ma page maître ... Dans mon proxy, quand Je configure l'Ajax (en utilisant l'interface graphique telerik en VS) Je ne trouve pas de refernce à lui-même ... (comme votre code semble le suggérer) ... Donc l'ajout manuel n'a pas aidé non plus. – Gotcha

Questions connexes