Startpage > Techblog > Posts with tag: asp-net
next page
thu

Sorry, this entry is only available in Deutsch.

Comment Feed Trackback URL
dri

Auf zum 2. Tag der Basta! Hauptkonferenz – und damit dem ersten der beiden SharePoint Days. Heute gibt es keine morgendliche Keynote, sondern es geht gleich in die Sessions – für mich ist das als erstes Sehenswertes aus SharePoint 2010 mit Tom Wendel. Erstaunlich für mich, dass nur ca. ein Drittel der anwesenden Entwickler Sharepoint 2010 überhaupt schon gesehen hat. Dementsprechend “basic” fällt die Vorstellung der Neuerungen aus – weshalb ich hier auch auf eine detaillierte Auflistung verzichte. Trotzdem ein paar “Bruchstücke”, die mir nennenswert erscheinen: reading the complete article »

Comment Feed Trackback URL
mhy

Das nächste Treffen der .NET Usergroup Dresden steht vor der Tür: Die .NET-Usergroup Dresden trifft sich das nächste Mal am 24.02. um 18:00 Uhr. Auch dieses Mal verspricht es wieder sehr interessant zu werden: Alexander Groß – vielen bekannt von der .NET Usergroup Leipzig – macht mit uns einen Rundgang durch sein aktuelles Projekt. Technisch wird das sehr interessant, denn mit dabei ist eine bunte Mischung von Technologien, Produkten und Frameworks – um nur wenige zu nennen: FubuMVC, NHibernate, MSpec, AutoMapper, ReSharper, Rake und MSDeploy. Ohne Slides aber dafür direkt am lebenden Objekt gezeigt, bleibt viel Raum für Diskussionen und Fragen.
Wir treffen uns dieses Mal in unseren Räumen. Nähere Informationen zum Termin gibt es im Xing und auf der Seite der .NET-Usergroup Dresden.

Comment Feed Trackback URL
thu

Für alle, die sich mit dem neuen Visual Studio und dem .NET Framework 4.0 vertraut machen  wollen oder mehr erfahren möchten, hat Microsoft das neu aktualisierte Visual Studio 2010 and .NET Framework 4 Training Kit veröffentlicht. Das am 11.01.2010 veröffentlichte 151 MB große Paket enthält eine Vielzahl von Präsentationen, Demos und Tutorials. Genau genommen 17 Präsentationen, 21 Demos und 26 Tutorials sowie 10 Videos. In dieser Version des Kits wird auch auf die Themen Office, SharePoint und Application Lifecycle Management eingegangen. Der Download lohnt sich auf alle Fälle.

reading the complete article »

Comment Feed Trackback URL
thu

Wohl jeder Sharepoint Entwickler welcher sich je mit Barrierefreiheit befasst hat, wird schon einmal von dem Alternative Rendering Framework von SPWorks gehört haben. ARF ist ein Open Source Project, welches von Vincent Rothwell entwickelt wurde um Sharepoint etwas barrierefreier zu gestalten. Das Framework beinhaltet mehr als 30 Controls für die Entwicklung barrierefeier Publishing Seiten. Alle Controls erzeugen XML welches mit Hilfe von XSLT letztendlich zu HTML Seiten gerendert werden kann.

Eines dieser Controls, welches aktuell bei uns verwendet wird, ist das ARF Navigations Control. Beim Anlegen einer Überschrift mit Link, kann optional ausgewählt werden, ob die Seite in einem neuen oder in dem aktuellen Fenster geöffnet wird.  Dabei ist mir aufgefallen, dass das ARF Menü diese Checkbox schlechthin ignoriert.

Properties

reading the complete article »

Comment Feed Trackback URL
thu

Neugierig geworden von der diesjährigen  Basta! und Oliver Scheers Vortrag über Silverlight und das .NET RIA Framework, wollte ich das Gehörte heute einmal versuchen in die Praxis umzusetzen.

Das .NET Rich Internet Application (RIA) Framework unterstützt  den Entwickler bei der Erstellung  n- schichtiger Applikationen. Die .NET RIA Services bilden dabei ein Datenzugriffsmodell welche aus einem Objektmodell (z.B. ADO.NET Entity Framework) einen sogenannten Domain Service zur Verfügung stellen können. Die Hauptzielgruppe dieser Technologie sind  .NET Entwickler welche sich vorrangig in Silverlight sowie ASP.NET Anwendungen heimisch fühlen.

Die erste Version der .NET RIA Services kann hier heruntergeladen werden. Es sollte beachtet werden, dass es sich dabei um eine frühe CTP Version handelt.

Nach dem ersten Installationsversuch der .NET RIA Services erhielt  ich folgende Fehlermeldung.

The following required components are missing.
Microsoft Silverlight 3 Developer Runtime
Microsoft Silverlight 3 Beta SDK
Microsoft Silverlight 3 Tools.

incompatible versions

Da ich die komplette Silverlight 3 Runtime inkl. Silverlight Tools bereits installiert hatte, erschien mir die Fehlermeldung etwas irreführend.  Nach kurzer Suche fand ich heraus, dass die .NET RIA Services nicht mit einer deutschen Installation von Visual Studio zusammenarbeiten. Aber wie so oft gibt es auch hier einen nicht dokumentierten Weg um an das Ziel zu kommen :)

Voraussetzung:

  • installiertes Visual Studio 2008 SP1
  • Silverlight 3 SDK
  • Silverlight 3 Tools für Visual Studio

1. Nachdem die .NET RIA Services heruntergeladen wurden in das Downloadverzeichnis wechseln
2. Folgenden Befehl ausführen msiexec /i RiaServices.msi NOCHECK=true

  • Dieser Befehl bewirkt, dass der Windows Installer aufgerufen wird, ohne jegliche Prüfung durchzuführen

3. Sofern die Installation fehlerfrei abgelaufen ist, folgen nun weitere wichtige Schritte:

  • Wechsel in das Verzeichnis C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\ProjectTemplates\CSharp\Silverlight\1033
    Darin befinden sich die zwei Zip Dateien BusinessApplication.zip und RIAServicesLibrary.zip.
    Diese beiden Dateien müssen nun in das deutsche Verzeichnis kopiert werden, zum Beispiel für eine deutsche Installation
    C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\ProjectTemplates\CSharp\Silverlight\1031
    Durch diese Aktion kann nun innerhalb des Neu->Projekt Dialoges das RIA Template gewählt werden
  • Um die Funktionen rund um die Domain Service Class und Authentifizierung nutzen zu können, müssen nun noch die Element Vorlagen kopiert werden. Dazu  in den folgenden Ordner wechseln C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\ItemTemplates\CSharp\Web\1033 und folgende Dateien in das deutsche Verzeichnis kopieren C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\ItemTemplates\CSharp\Web\1031
    - AuthenticationDomainService.zip
    - BusinessLogic.zip
    - SearchSitemap.zip
    - AdoNetDataService_DomainServiceCSharpWap.zip

4. Nun die Kommandozeile aufrufen und in folgendes Verzeichnis wechseln C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE


5. Von dort aus folgenden Befehl ausführen: devenv /installvstemplates

  • Visual Studio installiert nun alle neu gefundenen Templates für Projekte und Elemente

Sollte die nachstehende Fehlermeldung erscheinen: “Der angeforderte Vorgang erfordert erhöhte Rechte”, muss die Kommandozeile als Administrator ausgeführt werden.

Nach dem Neustart von Visual Studio sollte nun in der Projektvorlagenübersicht .NET RIA Service Class Library

ria1
und in dem Dialog Hinzufügen -> Neues Element die Domain Service Class auswählbar sein.

ria2

Neugierig geworden von der diesjährigen Basta! und Oliver Scheers Vortrag über Silverlight und das .NET RIA Framework, wollte ich das Gehörte heute einmal versuchen in die Praxis umzusetzen.

Das .NET Rich Internet Application (RIA) Framework unterstützt  den Entwickler bei der Erstellung  n- schichtiger Applikationen. Die .NET RIA Services bilden dabei ein Datenzugriffsmodell welche aus einem Objektmodell (z.B. ADO.NET Entity Framework) einen sogenannten Domain Service zur Verfügung stellen können. Die Hauptzielgruppe dieser Technologie sind  .NET Entwickler welche sich vorrangig in Silverlight sowie ASP.NET Anwendungen heimisch fühlen.

Die erste Version der .NET RIA Services kann hier heruntergeladen werden. Es sollte beachtet werden, dass es sich dabei um eine frühe CTP Version handelt.

Nach dem ersten Installationsversuch der .NET RIA Services erhielt  ich folgende Fehlermeldung.

The following required components are missing.
Microsoft Silverlight 3 Developer Runtime
Microsoft Silverlight 3 Beta SDK
Microsoft Silverlight 3 Tools.

incompatible versions

Da ich die komplette Silverlight 3 Runtime inkl. Silverlight Tools bereits installiert hatte, erschien mir die Fehlermeldung etwas irreführend.  Nach kurzer Suche fand ich heraus, dass die .NET RIA Services nicht mit einer deutschen Installation von Visual Studio zusammenarbeiten. Aber wie so oft gibt es auch hier einen nicht dokumentierten Weg um an das Ziel zu kommen :)

Voraussetzung:

  • installiertes Visual Studio 2008 SP1
  • Silverlight 3 SDK
  • Silverlight 3 Tools für Visual Studio

1. Nachdem die .NET RIA Services heruntergeladen wurden in das Downloadverzeichnis wechseln
2. Folgenden Befehl ausführen msiexec /i RiaServices.msi NOCHECK=true

  • Dieser Befehl bewirkt, dass der Windows Installer aufgerufen wird, ohne jegliche Prüfung durchzuführen

3. Sofern die Installation fehlerfrei abgelaufen ist, folgen nun weitere wichtige Schritte:

  • Wechsel in das Verzeichnis C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\ProjectTemplates\CSharp\Silverlight\1033
    Darin befinden sich die zwei Zip Dateien BusinessApplication.zip und RIAServicesLibrary.zip.
    Diese beiden Dateien müssen nun in das deutsche Verzeichnis kopiert werden, zum Beispiel für eine deutsche Installation
    C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\ProjectTemplates\CSharp\Silverlight\1031
    Durch diese Aktion kann nun innerhalb des Neu->Projekt Dialoges das RIA Template gewählt werden
  • Um die Funktionen rund um die Domain Service Class und Authentifizierung nutzen zu können, müssen nun noch die Element Vorlagen kopiert werden. Dazu  in den folgenden Ordner wechseln C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\ItemTemplates\CSharp\Web\1033 und folgende Dateien in das deutsche Verzeichnis kopieren C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\ItemTemplates\CSharp\Web\1031
    - AuthenticationDomainService.zip
    - BusinessLogic.zip
    - SearchSitemap.zip
    - AdoNetDataService_DomainServiceCSharpWap.zip

4. Nun die Kommandozeile aufrufen und in folgendes Verzeichnis wechseln C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE
5. Von dort aus folgenden Befehl ausführen: devenv /installvstemplates

  • Visual Studio installiert nun alle neu gefundenen Templates für Projekte und Elemente

Sollte die nachstehende Fehlermeldung erscheinen: “Der angeforderte Vorgang erfordert erhöhte Rechte”, muss die Kommandozeile als Administrator ausgeführt werden.

Comment Feed Trackback URL
thu

Ein Teil unserer Kernkompetenzen im Umgang mit Sharepoint, ist die Migration von Altsystemen zu Sharepoint. Ein aktuelles Projekt stellte uns vor die Herausforderung, Inhalte, Stylevorgaben und Meta-Daten mittels XML Import aus einem bestehenden Content Management System 1:1 nach SharePoint zu übernehmen. Besonders problematisch war dabei der Fakt, dass sich innerhalb der Daten Parameter für die Businesslogik versteckten. Diese Logik musste in SharePoint zum Teil nachgebaut und beim Import berücksichtigt werden.

Eine Teilaufgabe des Imports bestand in der Übernahme der eigentlichen Inhalte der Seiten. Diese lagen als barrierefreies HTML vor und mussten deshalb original so in die SharePoint Seite importiert werden.

Meine Aufgabe bestand nun darin, den originalen HTML Inhalt der zu migrierenden Seite in eine Sharepoint Seite zu importieren. Möglichst sollten die Optik  (Styles, Bilder, etc.) sowie der Inhalt (inkl. Links, Tabellen etc.) unangetastet bleiben.

Sharepoint bietet dem geneigten Entwickler mit seiner API reichlich Werkzeug um diese Aufgabe zu bewältigen. So kann eine Seite ohne Probleme mit folgenden Programmcode angelegt werden:

PublishingWeb currPublishingWeb = PublishingWeb.GetPublishingWeb(webContext);
PublishingPageCollection pages = currPublishingWeb.GetPublishingPages();
PublishingPage currentPage = pages.Add(pageFileName, layout);

Auf diese Weise ist eine Publishing Page schnell erstellt. Soll diese jetzt auch noch mit Inhalt versehen werden, wird das SPField, das für den Inhalt einer PublishingPage zuständig ist, benötigt.

Das SPField für Inhalte ist das PublishingPageContent Field, das über die FieldId Klasse verwendet werden kann.

SPListItem newFileItem = newFile.Item;
newFileItem[FieldId.PublishingPageContent] = htmlContent;
newFileItem.Update();

Bis hier wurde alles ordnungsgemäß von Sharepoint ausgeführt. Die Seite wurde angelegt und der Inhalt wurde auch gesetzt. Beim näheren Betrachten der neu Erstellten Seite wurde ich jedoch misstrauisch:

  • Aus einfachen Links wie zum Beispiel <a href=”../../beispiel.htm”>Beispiel</a> wurde <a>Beispiel</a>.
  • Kommentare wie <!– comment –> wurden einfach gelöscht
  • Auch Attributen wie beispielsweise Ids oder Klassen(class)  in Divs wurden gelöscht
  • Anführungszeichen wurden entfernt – <div style=”test”/> wird zu <div style=test/>

Durch dieses Verhalten wurden die importierten Seiten “wertlos” für mich. Alle darauf folgenden Versuche den Inhalt in die Seite zu schreiben schlug fehl. Versucht habe ich folgende Wege:

  1. Den Inhalt zu encodieren und anschließend wieder zu dekodieren. Prinzipiell hätte diese Variante funktioniert, jedoch hätte ich die Render Methoden des Sharepoint RichtTextEditors überschreiben müssen. Das hätte wiederum den Nachteil das die Editor Funktion nicht mehr ordnungsgemäß arbeitet. Der ausschlagegebende Faktor diese Variante nicht zu verwenden war jedoch die fehlende Möglichkeit der Indexierung des Inhaltes, da bei dieser Variante der Inhalt in Base 64 – codierter Form in der Sharepoint Datenbank gespeichert worden wäre und so durch die Suche nicht mehr indexiert werden kann.
  2. In einem zweiten Versuch, lud ich mir den Stream der neu angelegten Seite (auf File – Ebene) und ersetzte den von Sharepoint beschädigten HTML Inhalt durch den originalen. Leider wurde dieser Inhalt beim Speichern der Datei erneut beschädigt.
  3. Einen dritten Versuch ersparte ich mir, da dieser die Modifizierung der Sharepoint Datenbank vorgesehen hätte. Ich glaube der Erfolg hätte sich auch in Grenzen gehalten?!

Da ich das Problem gerne ohne “Dirty Hacks” lösen wollte, entschied ich mich eine Supportanfrage bei Microsoft zu stellen. Dazu sei erwähnt, dass die Anfragen über den Microsoft Support sehr schnell und kompetent beantwortet und abgewickelt werden.  Ich sollte meine Antwort von Microsoft bekommen; Leider hieß diese “By design” oder kurz auf deutsch: abgewiesen.

Die Begründung: Mirosoft Sharepoint nutzt einen sogenannten XSS (Cross side scripting) Protection Mechanismus. Dieser sollte verhindern das schädlicher Inhalte (Code) in Sharepoint eingepflegt werden kann.

Davon betroffen ist allerdings auch das HTML Texteingabe Control. Beispielsweise würde dieser Programm – Code wie folgt abgeändert:

original:       Das ist ein gutes <SCRIPT>void:alert("hello world")</SCRIPT> Script
verfälscht:     Das ist ein gutes Script

Auch “<” oder “>” Zeichen würden wie folgt abgeändert: &gt – &lt. Ich empfinde dieses Verhalten als vollkommen richtig und auch nachvollziehbar, wenn es dabei bleiben würde. Es stellte sich herraus dass dieser XSS Filter auch für die Kürzung meiner HTML Inhalte zuständig war. Microsoft selbst kann sich nicht erklären warum dieser Filter solch drastische Änderungen am HTML Quellcode vornimmt. Man riet mir von Seiten Microsoft ernsthaft  entweder ein 3rd Party AddOn als Ersatz für den RichTextEditor einzusetzen oder aber die Daten nicht innerhalb Sharepoints zu halten, sondern extern. Keiner der beiden angebotetenen Lösungen erschien mir für unser Projekt auch nur ansatzweise logisch beziehungsweise umsetzbar.

Lösung:

Um die Inhalte dennoch wie gefordert 1:1 importieren zu können, musste nun ein Workaround gefunden werden. Dazu bot sich eine Codierung der beim Import beanstandeten HTML-Tags an. Nach der erfolgreichen Integration der Methoden in unseren Import können nun alle Inhalte wie gefordert übernommen werden.

Comment Feed Trackback URL
dri

Crystal Reports ist ein leistungsfähiges Berichtserstellungstool (mittlerweile) aus dem Hause SAP, vorher von Business Objects, noch davor von Crystal Decisions (nein, Seagate Software erwähne ich jetzt nicht auch noch…) am Markt angeboten. Die Crystal Reports Runtime ist für Microsoft-Entwickler (bzw. deren Anwendungen) kostenlos nutzbar, solange ich mich zurückerinnern kann (und das geht immerhin abwärts bis Visual Basic 5.0 – in was für Sprachen man so alles mal programmiert hat…).

Jedenfalls gilt dies auch im Zeitalter von .Net und C# und es ist gängige Praxis, als Firma einige wenige Crystal Reports Vollversionen zu erwerben, die für die reine Berichtserstellung genutzt werden (in der Regel nicht von Programmierern) und dazu eine Anwendung (vorzugsweise eine Webanwendung)  zu erstellen, die den kostenlosen Crystal Reports Viewer mit all seinen Features (Parameterübergabe, Filtern, Export in verschiedene Formate etc.) integriert. Dabei kann man je nach Anforderungen die diversen Funktionalitäten des Viewers entweder out-of-the-box über dessen Toolbar nutzen oder selbst recht komfortabel über die Runtime-API programmieren. Das funktioniert sogar in SharePoint, indem man den Viewer in einen Webpart einbindet. Eigentlich eine feine Sache.

Um die Crystal Reports Runtime in ein eigenes Setup einzubinden, werden von SAP sogenannte Merge Module zum Download bereitgestellt. Diese muss man nur in Visual Studio.Net einem Setup-Projekt hinzufügen – und die Welt ist schön.

Mit Visual Studio.Net ist außerdem eine Art Spar-Edition von Crystal Reports gebundelt. Wer will, kann also auch hier Berichte erstellen, allerdings ist die Oberfläche etwas gewöhnungsbedürftig, wenn man die Vollversion kennt. Außerdem sind die gebundelten Versionen nicht gerade die aktuellsten: Die zur Zeit aktuelle Version ist Crystal Reports 2008 (entspricht Version 12), mit Visual Studio.Net werden folgende Versionen ausgeliefert:

  • VS.Net 2008: Crystal Reports 10.5
  • VS.Net 2005: Crystal Reports 10.2
  • VS.Net 2003: Crystal Reports 9

Das sehr verbreitete Crystal Reports XI kann nur mit einer Vollversion zur Berichtserstellung genutzt werden, es gibt aber verschiedene Runtime-Versionen für alle .Net Framework-Versionen von 1.1 bis 3.5. Bis hierher also alles im grünen Bereich.

Etwas befremdlich wird es allerdings, wenn man darüber nachdenkt, den Webserver/SharePoint auf einem 64-Bit-System zu installieren (was ja im Jahre 2009 keine sehr vermessene Idee scheint und z.B. von Microsoft für den SharePoint Server empfohlen wird):

  • Erste Erkenntnis: Die bisher für 32bit verwendete Runtime läuft unter 64bit nicht.
  • Zweite Erkenntnis: Nachdem man erstmal eine ganze Weile verzweifelt danach gegoogelt hat, irgendwo eine unter 64bit lauffähige Runtime für Crystal Reports XI zum Download zu finden, wird mit diesem Artikel vom SAP Support die Vermutung, dass Crystal Reports XI keine 64-Bit-Systeme unterstützt, zur traurigen Gewissheit. Crystal Reports 10 ist die “letzte” Crystal Reports Version, für die eine auf 64-Bit-Systemen lauffähige Runtime verfügbar ist. Etwaige weitere Schlüsse zu ziehen, wird dem geneigten Leser selbst überlassen…
  • Dritte (“Trostpflaster”-) Erkenntnis: Immerhin ist es möglich, mit Crystal Reports XI erstellte Reports unter der Runtime von Crystal Reports 10 und damit auch auf einem 64-Bit-System zum Laufen zu bringen. Dieser MSDN-Artikel beschreibt, wo die erforderlichen Redistributables zu finden sind, im VS-Projekt müssen noch die Referenzen auf die DLLs von Crystal Reports XI gegen die 10er DLLs ausgetauscht werden und wenn dann das Ganze noch kompiliert, hat man schon fast gewonnen :-)

Hat man allerdings in der bisherigen Anwendung ein Feature genutzt, das es in Crystal Reports 10 noch nicht gab, dann wird man wohl als 2. Sieger aus dem Rennen gehen…

Comment Feed Trackback URL
che

Seit Herbst 2008 bietet Microsoft mit den Microsoft Chart Controls für Microsoft .NET Framework 3.5 sowohl für ASP.NET als auch für WinForms-Anwendungen kostenlose Controls an, mit denen man schnell ansprechende und aussagekräftige Diagramme generieren kann.

Die Installation zusätzlicher Runtimes auf dem Server bzw. Client, wie z.B. bei Crystal Reports, entfällt. Einzige Voraussetzung ist ein installiertes .NET Framework 3.5 SP1.

Zu den Hauptmerkmalen gehören:

  • Visual Studio Design-Zeit Unterstützung
  • 25 verschiedene Diagramm-Arten
  • 3D Unterstützung für die meisten Diagramm-Arten
  • 3D Anpassungsmöglichkeiten, z.B. bei Perspektive, Beleuchtung, Rotation, Rand-Verzierungen, Anti-Aliasing, Transparenz, isometrische Projektion, Schatten, …
  • Unbegrenzte Anzahl von Diagrammen auf einer Seite/WinForm
  • Automatisches und manuelles Layout und Ausrichtungs-Management
  • Automatische und manuelle Skalierung
  • Logarhitmische Skalierung
  • Vollständig anpassbare Legenden
  • Intelligente Positionierung der Beschriftung
  • Bemerkungen, Trennlinien, Tooltips, etc.
  • Zoomen und Scrollen (Windows Forms)
  • Data Binding
  • Daten kopieren, zusammenführen, trennen, sortieren, durchsuchen, gruppieren und filtern
  • Daten exportieren
  • Binär- und XML-Serrialisierung
  • Unterstützung für Datum, Uhrzeit, Währung uvm.
  • Mehr als 50 Formeln für finanzielle und statistische Formeln, Daten-Analyse und Umwandlung
  • Echtzeit-Manipulation der Diagramme
  • Events vor und nach Erstellung des Diagramms
  • Unterstützung für AJAX Klick-Events
  • Zustands-Speicherung (ASP.NET)
  • Binär-Streaming (ASP.NET)
  • Kontrolle der Frame-Rate für Animationen (ASP.NET)

Hier bekommt man also eine ganze Menge geboten. Ich finde das ist definitiv einen Blick wert. Es ist sicher nicht so mächtig wie manch andere Werkzeuge für das Reporting, aber um einfach nur ein paar Diagramme zu erzeugen, ist es zumindest eine willkommene Alternative.

Der Einbau in eine ASP.NET Seite kann so einfach aussehen:

ASP.NET Chart Control

Die Ergebnisse können z.B. so aussehen:

3D Linien und Kurven Kuchen und Donut Finanzen

Links:

Comment Feed Trackback URL
che

Möchte man den ModalPopupExtender aus dem ASP.NET AJAX Control Toolkit verwenden, dann geht das nur mit dem DOCTYPE “XHTML 1.0 Transitional” so richtig reibungslos. Beim CollapsiblePanel gibt es dazu einen Hinweis in der Dokumentation, beim ModalPopup fehlt dieser Hinweis. Das Problem besteht aber auch dort.

Symptome: Das Popup wird nicht korrekt positioniert, zentriert sich nicht und viel zu lange Scrollbalken entstehen.

Gerade wenn man WebParts für SharePoint erstellt, hat man aber nicht immer Einfluss auf den DOCTYPE. Oder wenn man schon Einfluss auf den DOCTYPE hat, kann man ihn nicht immer einfach so ändern, weil dann evtl. andere Komponenten nicht mehr richtig funktionieren oder nicht mehr richtig dargestellt werden.

Der beschriebene Workaround aus der Dokumentation des AJAX Control Toolkit fällt damit als Lösung für uns aus.

Ein anderer Lösungsweg ist, ein Custom Build des ASP.NET AJAX Control Toolkit zu erstellen und darin das “fehlerhafte” Stück JavaScript zu korrigieren.

Dazu besorgt man sich den Quellcode via Codeplex und nimmt die folgenden zwei Modifkationen vor:

  • AjaxControlToolkit\Common\Common.js 
    • Darin sucht man nach “getClientBounds” und ersetzt das in der Funktion enthaltene SWITCH Statement durch folgendes:
              switch (Sys.Browser.agent) {
                  case Sys.Browser.InternetExplorer:
                      if (document.documentElement && document.documentElement.clientWidth)
                          clientWidth = document.documentElement.clientWidth;
                      else if (document.body)
                          clientWidth = document.body.clientWidth;
                      //clientWidth = document.documentElement.clientWidth;
                      if (document.documentElement && document.documentElement.clientHeight)
                          clientHeight = document.documentElement.clientHeight;
                      else if (document.body)
                          clientHeight = document.body.clientHeight;
                      //clientHeight = document.documentElement.clientHeight;
                      break;
                  case Sys.Browser.Safari:
                      clientWidth = window.innerWidth;
                      clientHeight = window.innerHeight;
                      break;
                  case Sys.Browser.Opera:
                      clientWidth = Math.min(window.innerWidth, document.body.clientWidth);
                      clientHeight = Math.min(window.innerHeight, document.body.clientHeight);
                      break;
                  default: // Sys.Browser.Firefox, etc.
                      clientWidth = Math.min(window.innerWidth, document.documentElement.clientWidth);
                      clientHeight = Math.min(window.innerHeight, document.documentElement.clientHeight);
                      break;
              }

      Diese Modifikation bringt dem Toolkit bei, Höhe und Breite ein bisschen besser auszulesen.  

      Achtung:

      Hat man bereits an anderen Stellen im eigenen Code Anpassungen aufgrund dieses Problems vorgenommen, indem man z.B. via CSS oder JavaScript nachträglich die Position eines AutoComplete Feldes korrigiert, so ist dies jetzt möglicherweise nicht mehr notwendig und/oder funktioniert nicht mehr richtig. Hier also nochmal kontrollieren!

  • AjaxControlToolkit\ModalPopupExtender\ModalPopupBehavior.js 
    • Dort in der “initialize” Funktion folgende Ersetzungen vornehmen: 
      this._backgroundElement.style.position = 'fixed';

       ersetzen zu

      this._backgroundElement.style.position = 'absolute';//'fixed';

      Ein paar Zeilen weiter unten:

      his._foregroundElement.style.position = 'fixed';

      ersetzen zu

      this._foregroundElement.style.position = 'absolute';//'fixed';

      Diese Modifikation beeinflusst andere Controls nicht, und sorgt nur für die ordentliche Positionierung des Popups.

Außerdem zu beachten:

Wenn man das Control Toolkit mit dem mitgelieferten Schlüssel kompiliert, so wir der selbe PublicKeyToken wie beim Original erzeugt. Daraus entstünde dann möglicherweise folgendes Problem:

Verwenden andere Komponenten auf dem Server auch das AJAX Control Toolkit, so bekommen sie die oben vorgenommenen Änderungen durchgereicht, sofern sie nicht explizit gegen eine bestimmte Version kompiliert wurden.

Man sollte also lieber einen neuen PublicKeyToken erzeugen, um möglichen Kompatibilitätsproblemen im Voraus zu entgehen.

Quelle:

Ramesh BhaskarFixing modalpopupextender position problems

Comment Feed Trackback URL
next page

Tag Cloud

Unsere Themen

Kommentare

  • Christian Heindel: Hallo Volti, die Option “Verbindung mit ‘Dokumentbibliothek̵ 7; herstellen”...
  • volti: Hi, ich hab das beschriebene Probleme mit Outlook 2010, dort finde ich die Option Aktionen >...
  • Michael Wittwer: Hallo Guter Beitrag, bin seit kurzem auch mit Balsamiq am arbeiten und die Effizienz ist einfach...
  • Frank: Danke, tut und ist im Vergleich zur Atlassian Lösung abwärtskompatibel bis Confluence 2.10.
  • Ghost@: Danke für die schnelle Antwort Martin! Das ist natürlich ärgerlich, dass der Datentyp nicht unterstützt ist....

Twitter