Laden...
Avatar #jVxXe7MDBPAimxdX3em3.jpg
Peter Bucher myCSharp.de - Experte
Software Entwickler Zentralschweiz Dabei seit 17.03.2005 5.941 Beiträge
Benutzerbeschreibung
Mein Name ist Peter Bucher, seit langer Zeit beschäftige ich mich schon mit Webtechnologien. Angefangen habe ich mit Html und Classic ASP. Jetzt arbeite ich vorallem mit .NET-Technologien.

Forenbeiträge von Peter Bucher Ingesamt 5.941 Beiträge

05.02.2010 - 08:57 Uhr

Salute schuppsl

Integriert ist performanter und skaliert vorallem besser.

Für den Entwickler selber ändert sich vorallem die Angabe in der web.config, dort hast du eine neue Sektion "system.webserver".
Wenn die Anwendung in beiden Modis laufen soll, musst du die HttpModule / HttpHandler an beiden Stellen angeben.

Im Detail:

Gruss Peter

04.02.2010 - 13:24 Uhr

Hallo 7.e.Q.

Es geht ja nicht darum, das du hingehen "musst" oder sollst, sondern es mich erschreckt das sowas überhaupt stört.
Der Vergleich mit den Büchern ist nicht ganz brauchbar. Das kann man gut abkapseln und es wären viel zu viel Einträge, die das Forum zuspammen würden.

Gruss Peter

04.02.2010 - 12:34 Uhr

Hoi Hendrik

Ich vermute mal, dass ich nicht der einzige bin, der als primärer Hobby-Entwickler Szene-News zu solchen Events gar nicht liest.

Das schockiert mich jetzt schon ein wenig.
Auch wenn es nur ein Hobby ist, muss es dich doch interessieren, wie du besser werden kannst, oder nicht?

Ich bin gegen eine solche Aufsplittung, weil es ja zur Szene gehört und so eben Leute darauf aufmerksam werden.

Gruss Peter

04.02.2010 - 12:07 Uhr

Hoi

Ohne Dekleration und Code ist es schwieriger zu erraten, aber das Problem ist eigentlich bekannt:

Gruss Peter

04.02.2010 - 12:05 Uhr

Salute Echo

Mache aus dem normalen Link eines mit target="_blank", so kommt entweder der Download oder ein leeres Fenster das du ggf. schliessen könntest.

Serverseitig kommst du über die Servervariablen mit dem Key "HTTP_REFER" an die vorherige Seite.

Gruss Peter

04.02.2010 - 10:33 Uhr

Salute Stefan

Da wäre nämlich schon die Frage ob man per XML-Konfigurationsdatei Cunstructor Injection machen kann.

Automatisch unterstützt LightCore "nur" Constructor Injection, ausser bei der WebForms-Integration.

Das ganze passiert implizit, du musst nur alle Abhängigkeiten einzeln registrieren, d.h. per Xml oder Code angeben. Anschliessend ein Konstruktorargument angeben und eine Instanz deiner Klasse mit dem Konstrukorargument auflösen.

Pseudomässig:


Xml:
<Registration ILooger, Logger.....
<Registration IRepository, Repository...

Repository Klasse:
public class Repository : IRepository
{
    private ILogger _logger;

    public Repository(ILogger logger)
    {
        this._logger = logger;
    }
}

Aufruf:

// Xml Konfiguration einlesen...

IRepository repository = container.Resolve<IRepository>(); // ILogger wird implizit / automatisch injiziert.

Gruss Peter

04.02.2010 - 10:27 Uhr

Salute Burnswigg

Ausser einem normalen Link, das der Benutzer anklickt, oder Javascript das ausgeführt wird, gibt es keine Möglichkeit.

Gruss Peter

04.02.2010 - 10:25 Uhr

Salute haargel

Schwierig zu sagen, wenn man keine Implementation sieht.
Schau dir mal das asp:Panel im Reflector an. Damit sowas funktioniert, musst du das Control mit Attributen versehen.

Gruss Peter

02.02.2010 - 11:08 Uhr

Hoi Maddinel

Das geht nicht, zumindest nicht einfach und sauber.

Ich nehme an du möchtest das deine Inhalte aus dem Tabellengitter ausbrechen. Das kannst du zwar schon machen, jedoch nur über Zellen hinweg, nicht über eine "halbe" Zelle.

Wenn du das möchtest, müsstest du mit einem Layer arbeiten, der über der Tabelle liegt.
Das ist aber so eine wackelige Geschichte, das ich mir eine Alternative überlegen würde.

Gruss Peter

28.01.2010 - 22:27 Uhr

Salute zusammen

@michlG
ReSharper kriegst du in der Beta-Phase unbegrenzt, einfach ein neuer Build vom EAP runterladen 😃.

Wie gesagt, ReSharper läuft super (Ohne könnte - nein - will ich nicht 😉, aber nur wenn man mindestens 4GB RAM hat und wie geschrieben, die Solution Analyse ausschaltet. (Context Actions gehen trotzdem).

Im Geschäft arbeiten wir mit .NET 4.0 produktiv, an dem wirds also nicht liegen.
Momentan läufts stabil, mehr als ein Absturz am Tag gibts nicht, und der lässt sich verkraften 😃.

Kann ich nicht bestätigen. Auch .NET 4 und Silverlight 4 stören bei mir nicht. Dass es langsamer als das 08er sein soll, kann ich eigentlich auch nicht nachvollziehen.

Dito. Langsamer sicher, aber nicht so das man nicht damit arbeiten könnte.

Gruss Peter

28.01.2010 - 21:43 Uhr

Salute zusammen

Wir verwenden im Geschäft komplett VS2010 Beta 2 produktiv. Mit ein paar Einstellungen, bspw. die Analyse der ganzen Solution im ReSharper ausschalten, läufts ganz gut und angenehm.

Wenn man bedenkt das VS sowie auch ReSharper noch ziemliche Betas sind, kann man mit den richtigen Einstellungen ganz gut produktiv damit arbeiten.

Gruss Peter

28.01.2010 - 11:28 Uhr

Salute Neals

Du musst zwischen den konkreten Vorgehensweisen "Service Locator" und "Dependency Injection" unterscheiden.

Lies dir mal folgendes durch:

Es braucht schlussendlich meistens beides, die Patterns ergänzen sich also.

Gruss Peter

27.01.2010 - 22:03 Uhr

Salute Floste

Und wo braucht man das? 😃

Gruss Peter

27.01.2010 - 17:34 Uhr

Salute Sebastian

Gibts zirkuläre Referenzen? 😉

Du kannst das so aufbauen:

  • Project.Contracts (Interfaces)
  • Project.WebApp (Web)
  • Project.WebControls (Controls)
  • .....

In der Contracts Assembly erstellst du ein Interface, das du in deiner WebApp implementierst, also machst du dir eine Basis-Masterpage.

Die Contracts referenzierst du in jedem Projekt wo es nötig ist.
Jetzt brauchst du keine Referenz mehr vom Projekt.XYZ auf deine WebApp, sondern nur noch auf Contracts.

Gruss Peter

27.01.2010 - 17:31 Uhr

Salute zusammen

Du kannst ein Dictionary<TKey, TValue> verwenden, als Key kannst du bzw. solltest du eine Kombination aus Name + X + Y nehmen, wobei X, Y bspw. für die Telefonnummer stehen könnte.

Ansonsten brauchts mehr Infos.

Gruss Peter

27.01.2010 - 12:49 Uhr

Hallo zusammen

@dN!3L
Dort wird wirklich nur eine statische Codeanalyse gemacht, damit man eben Kompile- und nicht Runtimefehler erhält.

@Timur
Wo wird denn verteilt?
Wenn du mit ≥ IIS7 arbeitest, kannst du doch neu Pakete schnüren,
so ähnlich wie die Web Application Gallery die man installieren kann.

So ist es egal wieviele Dateien du hast und ich fände es auch die bessere Lösung.
Guckst du:

Gruss Peter

27.01.2010 - 08:57 Uhr

Hoi schuppsl

An einem statischen Konstruktor wird das nicht liegen.
Ich habe hier mehrere Anwendungen wo das wunderbar läuft.

Läuft denn eine einfache Anwendung?

Gruss Peter

26.01.2010 - 13:42 Uhr

Hoi schuppsl

Sorry, falsch geschrieben, ich habs oben korrigiert:

Gruss Peter

26.01.2010 - 12:11 Uhr

Hallo schuppsl

Der Standardbenutzer ist "Network Service" oder "Netzwerkdienst".
Ansonsten bitte eine Fehlerbeschreibung.

Evt. hast du den IIS nach .NET installiert?
Wenn ja, müsstest du ASP.NET noch registrieren: reg_iis.exe -i

Gruss Peter

26.01.2010 - 07:35 Uhr

Salute lexy

Nimm doch LINQ to XML, das ist um einiges bequemer 😃

Gruss Peter

25.01.2010 - 16:59 Uhr

Salute deces

Wo liegt denn genau das Problem?
Die einfachste Möglichkeit wäre Serialisierung, die aufwändigere wenn du eine Datenstruktur dafür anlegst (Xml / Datenbank).

Der Typ "Model3DGroup" nützt uns nicht viel, wenn wir nicht wissen wie dieser aussieht.

Gruss Peter

22.01.2010 - 13:00 Uhr

Salute math55

Und wie sieht die Lösung aus?
Das hilft den anderen dann auch weiter.

Gruss Peter

21.01.2010 - 22:33 Uhr

Salute dewebey

Ja ich habe mich vertan.
Folgendes:


var row = (GridViewRow)checkbox.NamingContainer;
DeinDataTyp data = (DeinDataTyp)row.DataItem;

string name = data.Name;
// ...

Gruss Peter

21.01.2010 - 22:25 Uhr

Salute Second Sun

Stimmt, da war noch was 😃.

Benutzer bzw. Sessions zählen geht schon, mit diversen Ansätzen.
Bspw.:

Allerdings kriegst du das nicht wirklich genau mit, wenn du das Timeout nicht runterstellen kannst und kein clientseitiges Pooling nutzt.

Gruss Peter

21.01.2010 - 12:30 Uhr

Salute zerberos

Entweder reicht es, das Projekt zu bereinigen und neu zu builden sowie die temporären ASP.NET Dateien löschen.

Ansonsten kopierst du dir die ASPX-Seite sowie den Codebehind, erstellst eine neue Seite und fügst die relevanten Bestandteile wieder ein.

Gruss Peter

21.01.2010 - 12:28 Uhr

Salute dewebey

Schau dir doch die Controlhierarchie im Debugger an.
Du kannst e.Item.DataItem auf deinen Datentyp casten, den du per .DataSource an das Grid bindest.

Von dort kannst du dann einfach auf die Eigenschaften zugreifen.

Gruss Peter

21.01.2010 - 11:38 Uhr

Salute HeinzTomato

Guckst du hier:

Gruss Peter

20.01.2010 - 12:51 Uhr

Salute math55

Controls einsetzen und die Databinding Ausdrücke auf die Eigenschaften legen? 😃
Du musst ggf. einmal ' benutzen und einmal ", damit der Interpreter nicht durcheinander kommt.

Gruss Peter

19.01.2010 - 19:49 Uhr

Hallo Second Sun

Die Fehlerseite anpassen?
Kann auch eine ASP.NET Seite sein 😃

Gruss Peter

19.01.2010 - 19:10 Uhr

Salute zusammen

Anonyme Typen können nur im Kontext einer Methode - also für lokale Variablen - verwendet werden. Von daher ist das ganze gar nicht möglich.

Hinterlege die komplette Abfrage als Instanzmember und gib in deiner Methode nur das gewünschte zurück.

Gruss Peter

19.01.2010 - 17:35 Uhr

Salute xforfun

Kann ich solche HttpModules eigentlich auch dynamisch nachladen per Code?

Soweit ich weis nicht.
Würde ja auch keinen Sinn machen. Entweder brauchst du die Module oder nicht.

Oder was für ein Anwendungsfall fällt dir da ein?

Gruss Peter

19.01.2010 - 14:51 Uhr

Salute zusammen

Ja, mit Ko- und Kontravarianz funktioniert das dann.
Im Moment musst du einfach den Umweg über ein nichtgenerisches Interface gehen.

Intern kannst du trotzdem noch Generics zur Hilfe nehmen.

Gruss Peter

19.01.2010 - 14:48 Uhr

Salute zusammen

Arrays sowie auch Listen haben ihre Daseinsberechtigung.
In die Mottenkiste gehört dieser Datentyp nicht, so elementar wie er ist.

Es gibt Anwendungsfälle die mit einem Array besser / einfacher / schneller zu bewältigen sind (Viele Indexzugriffe, Matrixen, ...) und Anwendungsfälle wo die Liste besser ist.

Allgemein sollte man aber wissen, das Array wenn möglich nicht in eine öffentliche API gehört, sondern ein Interna bleiben soll.
Dasselbe gil auch für List<T>, allerdings weicht das jetzt schon fast wieder vom Thema ab.
Wenn es interessiert, kann hier nachlesen:

Array sind schneller, weil List<T> intern mit einem Array arbeitet.
Jedoch ist eine Liste viel komfortabler und einfacher in der Nutzung, vorallem wenn man nicht indexbasiert arbeitet.

Der Geschwindigkeitsunterschied sollte praktisch nicht zu merken sein und in den allermeisten Fällen ist IMO List<T> zu bevorzugen.

Gruss Peter

19.01.2010 - 14:44 Uhr

Salute xforfun

Mittlerweile finde ich die sauberste Lösung, alles mit CSS-Klassen zu versehen und dann mit jQuery zu selektieren.

Gruss Peter

19.01.2010 - 13:34 Uhr

Salute Tott666

Also mein Server war gleich am nächsten Morgen zugreifbar.
Dann müssen sie im Moment wohl einen riesen Ansturm haben.

Gruss Peter

18.01.2010 - 14:36 Uhr

Salute zusammen

Ansonsten gibts noch die Open Generic Types, dort musst du den Typen (Type-Instanz) allerdings dann sicher zur Laufzeit wissen.

Type openType = typeof(List<>);
Type elementType = typeof(int);
Type closedType = openType.MakeGenericType(elementType);

IList list = (IList)Activator.CreateInstance(closedType);

// Bzw. weisst du dann später was du für einen Typ angefordert hast und kannst ihn casten...

Gruss Peter

18.01.2010 - 14:33 Uhr

Salute xforfun

Benutze im Browser CTRL+F5 anstelle von F5 um den Cache zu unterdrücken, das hilft 😃

Gruss Peter

15.01.2010 - 15:32 Uhr

Salute Jürgen

Das Tool heisst jetzt neu scheinbar WCat, zu finden ist es hier:

Gruss Peter

14.01.2010 - 18:06 Uhr

Hallo zusammen

Als Ergänzung:
Statische Eigenschaften sind ja nicht überschreibbar, würde ja auch keinen Sinn machen.

Gruss Peter

14.01.2010 - 11:52 Uhr

Salute abra_joe

Nur der Vollständigkeits halber.

In deinem geposteten Beispiel wäre die "is"-Abfrage unsinnig, da du immer ein Objekt vom Typ Button bekommen würdest.

Gruss Peter

14.01.2010 - 11:07 Uhr

Hallo Stefan

Bei Schnittstellen, Basisklassen und verwandte Themen und Techniken fällt den Entwicklern der Groschen nach meiner (auch persönlicher) Erfahrung erst nach einer gewissen Zeit. Das ist also ganz normal.

Aber wenn er gefallen ist, tun sich viele Möglichkeiten auf 😃

Gruss Peter

14.01.2010 - 10:09 Uhr

Salute Christian

Schau dir mal den generierten Html-Code an, das geht simpler und einfacher 😃


<asp:Panel ID="panFehlermeldung" CssClass="ErrorMessage" runat="server" Visible="False">
            <asp:Label ID="labFehlermeldung" runat="server"></asp:Label>
    </asp:Panel> 


.ErrorMessage
{
    // div formatieren
}

.ErrorMessage span
{
    // label formatieren
}

Gruss Peter

13.01.2010 - 14:47 Uhr

Hoi herbivore

[...] wenn ein Fragezeichen in der Url anzeigt, dass es sich um eine parametrisierte (und damit vermutlich dynamische) Seite handelt.

Das ist nicht ganz vollständig.

Ein leeres Fragezeichen, oder immer dasselbe ändert überhaupt nichts.
Erst wenn die sich die Parameter von mehreren Requests unterscheiden, also:

default.aspx
default.aspx?param=value
default.aspx?param=value&param2=value2

Das Caching basiert auf der Eindeutigkeit der gesamten Url, einmal geladen verhält sich eine Parametrisierte Seite genau so wie eine normale.

Es gibt nur den Trick, das hinter einer Bild-Url ein Parameter "?rnd=<Zufallszahl>" gesetzt wird, um das Neuladen (Nicht das Cachen selber zu deaktivieren) zu forcieren.

Gruss Peter

11.01.2010 - 17:49 Uhr

Salute Midnight Run

Wenn du nur Teilbereiche einer Webseite updaten musst, schau dir mal AJAX an.

Gruss Peter

10.01.2010 - 11:49 Uhr

Hallo Philip

Deine Lösung ist eher suboptimal weil der Javascript Code nicht gecacht wird.
Entweder Selektoren, ggf. Klassen mit Hilfe von jQuery nutzen, oder aber so wie in den Links im folgenden Blogpost beschrieben.

Gruss Peter

04.01.2010 - 17:16 Uhr

Hoi Philipp

Über die Servervariablen und dem Key "REMOTE_ADDR" kommst du an die IP-Adresse.
Jedoch wäre es auch möglich das herauszufinden, wenn du sowieso integrierte Windows Authentifizierung / AD benutzt.

Gruss Peter

04.01.2010 - 17:15 Uhr

Salute Tarion

Wann weisst du denn was es für einen Typ werden soll und weisst du es überhaupt?
Du kannst alles zur Laufzeit machen, das ist möglich, auch generische Typen / Methoden, ...

Bspw. Type.MakeGenericType / .MakeGenericMethod.

Allerdings nützten dir Generics auch nur etwas, wenn du an einem späteren Zeitpunkt dann einen expliziten Cast machen kannst.

Gruss Peter