Archiv

Archiv für die Kategorie ‘asp.NET’

JS/asp.NET :: Modales Popup

17. Dezember 2008 Keine Kommentare

Nachdem ich ja bereits das “puristische” modale Popup beschrieben habe, hier nun die elegantere Lösung.

Zunächst benötigen wir ein einfaches Javascript, dass wir im Head-Bereich der aufrufenden Seite platzieren:

<script type=“text/javascript“>
function Dialog()
   {
      var ret=window.showModalDialog(“popup.aspx”,window, ↙
      “dialogHeight: 500px; dialogWidth: 800px; status: No; center:yes”
   );

   if (ret == “1″)
      {
         document.location.href = document.URL;
      }
   }
</script>

Der Aufruf dieses modalen Popups kann über zwei Wege erfolgen:

- per Link im html-Quelltext:

<a href=”javascript:void(0);” onClick=”Dialog();”>Popup öffnen</a>

- per Aufruf durch einen <asp:Button>:

Um den Aufruf durch einen <aps:Button> zu realisieren muss dem Button ein Attribut zugewiesen werden:

protected void Page_Load(object sender, EventArgs e)
{
    myButton.Attributes.Add(“onClick”, “javascript:Dialog();”);
}

Dieses Attribut bewirkt nun, dass beim Klicken des Buttons das Javasript Dialog() aufgerufen werden.

Hinweis:
In der aufgerufenen Seite (also im Popup) sollte im Head folgender Tag platziert werden:

<base target=“_self”/>

Wenn der Tag fehlt, öffnet jeder Link und jeder Klick auf einen Button ein neues Browserfenster ausserhalb unseres modulen Popups.

AJAX :: ListSearchExtender und große Listen

29. Oktober 2008 Keine Kommentare

Wer das AJAX-Control-Toolkit von www.asp.net heruntergeladen hat und den ListSearchExtender einsetzt, wird feststellen, dass die Verarbeitung von großen Listen (> 10.000 Einträge in der Liste) ein paar Probleme aufwirft:

  • IsSorted = true führt dazu, dass die Performance so in den Keller geht, dass der Externder nicht mehr wirklich Sinn macht. Da ist die klassische Javascript-Suche schneller…
  • Wenn man also IsSorted = false einstellt und damit eine sehr perfomante Suche gestalten kann, unterdrückt der Extender bei Culture de-DE sämtliche Sonder- und Leerzeichen. Damit ist eine vernünftige Suche weiterhin nicht realisierbar.

Um diese Probleme in den Griff zu bekommen, ist es nun nötig, den ListSearchExternder im SourceCode, der von Microsoft mit dem Toolkit ausgeliefert wird, wie folgt zu verändern:

  1. Starten der AjaxControlToolkit.sln aus dem Root des entpackten ControlKits.
  2. Im Projekt “AjaxControlToolkit” (sollte als erstes aufgeführt sein) die Datei “ListSearch\ListSearchBehavior.js” öffnen
  3. Ersetzen (1):

_checkIfSorted : function(options) {
   if (this._isSorted) {
   // we assume this is sorted
      return true;
   } else {
      // it is not known if elements list is sorted, so check it by itself
      var previousOptionValue = null;
      var optionsLength = options.length;
      for(var index = 0; index < optionsLength; index++) {
         var optionValue = options[index].text.toLowerCase();
         if(previousOptionValue && this._compareStrings 
                   (optionValue, previousOptionValue) < 0) {
            return false;
         }
      previousOptionValue = optionValue;
      }
      return true;
     }
  },

durch

_checkIfSorted : function(options) {
   if (this._isSorted) {
   // we assume this is sorted
      return true;
   } else {
      // it is not known if elements list is sorted, so check it by itself
            return false
      }
  },

 

    4. Ersetzen (2)

_doLinearSearch : function(options, value, left, right) {
   if (this._queryPattern ==
               AjaxControlToolkit.ListSearchQueryPattern.Contains) {
      for(var i = left; i <= right; i++) {
         if(options[i].text.toLowerCase().indexOf(value) >= 0) {
            return i;
            }
        }
    } else if (this._queryPattern ==
               AjaxControlToolkit.ListSearchQueryPattern.StartsWith) {
      for(var i = left; i <= right; i++) {
         if(options[i].text.toLowerCase().startsWith(value)) {
            return i;
         }
      }
    }
      return -1;
    },

durch:

_doLinearSearch : function(options, value, left, right) {
   if (this._queryPattern ==
               AjaxControlToolkit.ListSearchQueryPattern.Contains) {
      for(var i = left; i <= right; i++) {
         if(options[i].text.toLowerCase().indexOf(value) >= 0) {
            return i;
            }
        }
    } else if (this._queryPattern ==
               AjaxControlToolkit.ListSearchQueryPattern.StartsWith) {
      for (var i = left; i <= right; i++) {
         if (options[i].text.toUpperCase().indexOf(
                                value.toUpperCase()) == 0) {
            return i;
            }
         }
      }
      return -1;
      },

 

Kompilieren - die AjaxControlToolkit.dll im Bin-Verzeichnis der Webseite aktualisieren und schon funktioniert es bestens…

Kategorienasp.NET Tags: