Announcement

Collapse
No announcement yet.

Benutzung von Ajax Control im Usercontrol(ascx)

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Benutzung von Ajax Control im Usercontrol(ascx)

    Tach Experten..

    Ich habe hier ne Problem wo ich nicht weiter weiß.

    Ich habe einen Control der in einer Seite hinzugefügt wird. Im Grunde ist es ein Content Management System.

    Man wählt eine neue Seite aus und kann verschiedene Controls hinzufügen.

    In dem Control selbst benutze ich einen ModalPopupvon Ajax, der aber einen Scriptmanager benötigt.

    Nun frage ich ob in der Seite wo das Controlhinzugefügt wird schon ein Scriptmanager vorhanden ist ansonsten füge ich eins hinzu.

    Hier
    Code:
     void AddScriptMagnager()
            {
                //get the existing ScriptManager if it exists on the page
    
                ScriptManager _scriptMan = ScriptManager.GetCurrent(this.Page); 
    
                if (_scriptMan == null)
                {
                    //create new ScriptManager and EnablePartialRendering or whatever
                    _scriptMan = new ScriptManager();
                    _scriptMan.EnablePartialRendering = true;
                    _scriptMan.EnableScriptLocalization = true;
    
                    if (this.MuMPage.Page.Form != null)
                    {
                        foreach (Control ctrl in this.MuMPage.Page.Form.Controls)
                        {
                          this.MuMPage.Page.Controls.Add(_scriptMan);
                        }                    
                    }
                }
            }
    Kriege aber immer den Fehler dass ich

    Server Error in '/AxCMSweb_MuM' Application. Extendersteuerelemente dürfen nicht vor PreRender registriert werden.




    Danke vorraus!!!

  • #2
    Ich würde den ScriptManager ganz herauslassen und diesen von aussen an dem Control konfigurierbar machen. Es darf in einer ASP.NET Seite nämlich nur einen SkriptManager geben. Deswegen ist der beste Ort dafür die MasterPage.
    Weiterhin würde ich in der Dokumentation Deines Controls darauf hinweisen, dass man ihm einen SkriptManager zuweisen muss.

    Comment


    • #3
      Ok bloss wie soll ich den von aussen konfigurierbar machen? Du musst die vorstellen es kann in beliebige Seite eingefügt werden! Was mache ich wenn in der Seite X schon ein Scriptmanager vorhanden ist?

      Deshalb will aus dem Control herausfinden ob in der Seite wo es grad eingebunden wird ein Scriptmanager vorhanden ist oder nciht?!?

      Comment


      • #4
        Originally posted by Gervacio View Post
        ...Deshalb will aus dem Control herausfinden ob in der Seite wo es grad eingebunden wird ein Scriptmanager vorhanden ist oder nciht?!?
        In jedem Control was einen ScriptManager braucht wird der ScriptManager von aussen gesetzt. Ich denk alle AJAX Enabled Controls wollen das so.

        Setz das doch einfach so:

        [highlight=c#]
        //Weiss leider nicht genau von was WebControls erben
        public class MyWebControl:Control
        {
        private Control _controlWasScriptManagerBraucht;

        ...

        public ScriptManager ScriptManager
        {
        get { return _controlWasScriptMangerBraucht.ScriptManager; }
        set { _controlWasScriptMangerBraucht.ScriptManager = value; }
        }
        }
        [/highlight]

        So solltest Du dann, wenn Du Dein eigens erstelltes Control in die Seite ziehst, die Möglichkeit haben im Eigenschaftsfenster die ScriptManager Eigenschaft setzen zu können. Wenn Du eine MasterPage drum herum hast, dann solltest Du auch diesen ScriptManager für Dein Control auswählen können.

        Comment


        • #5
          So siehts aus bei mir:


          Code:
          public partial class GoogleLinkControl : BaseControl
              {
                 
                  #region Events
          
                  protected override void OnInit(EventArgs e)
                  {
                      base.OnInit(e);
                      this.Load += new EventHandler(GoogleLinkControl_Load);           
                  }
          
                  void AddScriptMagnager()
                  {
                      //get the existing ScriptManager if it exists on the page
          
                      ScriptManager _scriptMan = ScriptManager.GetCurrent(this.Page);
          
                      if (_scriptMan == null)
                      {
                          foreach (Control ctrl in base.Page.Controls)
                          {
                              if (ctrl is HtmlForm)
                              {
                                  HtmlForm currentForm = (HtmlForm)ctrl;
                                  
                                  foreach (Control ctrl_ in currentForm.Controls)
                                  {
                                      //create new ScriptManager and EnablePartialRendering or whatever
                                      _scriptMan = new ScriptManager();
                                      _scriptMan.EnablePartialRendering = true;
                                      _scriptMan.EnableScriptLocalization = true;
          
                                      ScriptManager testCX = ScriptManager.GetCurrent(base.Page);
          
                                      base.Page.Controls.Add(_scriptMan);
                                  }
                              }
                          }
                      }
                  }
          
                  void moreImage2_Click(object sender, ImageClickEventArgs e)
                  {
                      string url = moreLink.NavigateUrl;
          
                  }
          
                  void GoogleLinkControl_Load(object sender, EventArgs e)
                  {
                      moreImage2.ImageUrl = CMSConfigurationSettings.VirtualPath + @"/templates/Images/arrows_forward.gif";
                      string u = moreLink.NavigateUrl;
                      moreImage2.Attributes.Add("onclick", "JavaScript: validate()");
                  }
          
                  #endregion
              }

          Comment


          • #6
            Folglich siehts doch so aus:

            Du hast in Deinem GoogleLinkControl irgendwo ein Control was AJAX benötigt und damit einen ScriptManager benötigt (ich nenne es in meinem Beispiel myAjaxEnabledControl). Ist diese Annahme richtig? Und Du ziehst dieses Control von der Toolbox irgendwo in Deine Seite (das kannst Du wenn du das Projekt einmal erstellst)?

            [highlight=c#]
            public partial class GoogleLinkControl : BaseControl
            {
            public ScriptManager ScriptManager
            {
            get { return myAjaxEnabledControl.ScriptManager; }
            set { myAjaxEnabledControl.ScriptManager = value; }
            }
            }
            [/highlight]

            Wenn Du das Ding nun in ein Formular ziehst sollte es eine Eigenschaft ScriptManager haben, welche Du setzen kannst. Ausserdem hängt man sich nicht auf den EventHandler der eigenen Klasse, sondern überschreibt die Funktion der Oberklasse:

            [highlight=c#]
            protected override void OnInit(EventArgs e)
            {
            base.OnInit(e);
            }

            public override void OnLoad(EventArgs e)
            {
            moreImage2.ImageUrl = CMSConfigurationSettings.VirtualPath + @"/templates/Images/arrows_forward.gif";
            string u = moreLink.NavigateUrl;
            moreImage2.Attributes.Add("onclick", "JavaScript: validate()");
            }
            [/highlight]

            Comment


            • #7
              Also ich habs nun so gelöst dass ich ein eigenes Template erstellt hab, der einen Scriptmanager enthält.

              nun kriege ich aber die Fehler meldung dass:

              Server Error in '/AxCMSweb_MuM' Application.
              Extendersteuerelemente dürfen nicht nach PreRender registriert werden.


              ich bin die Daten nun in dem Databinding Event, ist das richtig so oder gibts noch ne geeigneteres Event?
              Zuletzt editiert von Gervacio; 22.06.2010, 09:15.

              Comment


              • #8
                Funktioniert meine Lösung nicht? Hab ich was falsch verstanden?

                Comment


                • #9
                  Originally posted by fanderlf View Post
                  Funktioniert meine Lösung nicht? Hab ich was falsch verstanden?
                  N sie funktioniert nach wie vor nicht! Es kommt immer noch die Meldung dass

                  Extendersteuerelemente dürfen nicht nach PreRender registriert werden.

                  Comment

                  Working...
                  X