Laden...

Forenbeiträge von mosspower Ingesamt 456 Beiträge

18.12.2022 - 22:32 Uhr

... was sich so liest, dass Du eine API mit .NET Core bauen willst OHNE ASP.NET Core als Framework zu verwenden.

Naja, wenn ich eine reine REST-API bauen möchte, dann sollte eigentlich auch .NET ("Core") ausreichen - so zumindest meine "Denke"
Hier Core in Anführungszeichen, weil es das "eigentlich" ab Version .NET 5 nicht mehr gibt (nein, kein Durcheinander aus Redmond mit .NET/FRAMEWORK, Standard, Core. Web API 2 usw.) 😉 ...

Man kann auch die Minimal APIs verwenden (wenn man paar Features nicht braucht, die derzeit MVC-Exlusiv sind), aber auch hier ist die harte Angabe des Pfads der empfohlene Weg ...

Warum soll man MVC-Inklusiv verwenden, wenn man "nur" eine REST-API erstellen möchte. Das muss mir mal einer erklären - ich verliere da echt oft den Überblick oder auch das Verständnis. Zumindest ist es ein legitimer Weg, von ControllerBase abzuleiten und dann konventionelles Routing weiterhin zu verwenden ohne den ganzen MVC-Overhead zu haben. (bezieht sich jetzt auf ControllerBase und nicht die Route Attributes)

Naja, ich machs mal kurz ... zumindest macht man sich diesbezüglich "ernsthaft" Gedanken - müssen da aber bis zur Version 8 warten denke ich.
https://github.com/dotnet/aspnetcore/issues/43192

[Edit]
.... ich verstehe aber nun langsam immer mehr, warum die Attribute bei nachvollziehbaren und (mitunter) sehr komplexen Routes dann doch der einfachere und höchstwahrscheinlich auch performantere Weg sind, auch wenn ich mich damit nicht so richtig anfreunden möchte, aber ich glaub, ich nehme Attribute, soz. als das kleinere Übel.
Danke für die Hinweise, damit erledigen sich nun viele andere Probleme.
[/Edit]

18.12.2022 - 20:43 Uhr

Hallo Abt,

ich meinte natürlich ASP.NET ("Core"), aber ich denke, das wusstest Du selber?

Du schreibst, dass dafür seit ~15 Jahren die "Empfehlung" Route Attribute sind.
Nun, das ist mir bewusst, und mit Verlaub, das finde ich einen richtigen Schwachsinn.
Ich denke nur an hunderten von Controllerklassen mit tausenden Actionmethoden mit jeweils einem Attribute mit String gekennzeichnet, da wird mir schlecht. In Verbindung mit ApiController-Attribute ist dieser Schwachsinn sogar "mandatory" 😉 -

Fehlermeldung:
System.InvalidOperationException: 'Action 'ASP.NET_Core_Web_API.Filter.ActionFilter.OnActionExecuting (ASP.NET Core Web API)' does not have an attribute route. Action methods on controllers annotated with ApiControllerAttribute must be attribute routed.'

das ist für mich ein Steinzeitrückschritt aus Redmond, solche Empfehlungen abzugeben, aber das ist ein anderes Thema und natürlich Ansichtssache.

Ich glaube, da ist auch aktuell ein Feature in Arbeit, dies zentral verwalten zu können über Routingeinstellungen, wie man es auch erwarten würde.

Aber danke für Deine Hinweise. Ich hake das mal ab .... ich kann damit leben, dass es nicht (mehr) geht, zwar nicht gut, aber ich muss wohl 😉

18.12.2022 - 19:39 Uhr

Hallo,

ich erstelle gerade ein API-Projekt und möchte, so wie es eigentlich auch sein soll, nur .NET (Core) verwenden, ohne .NET.ASP (Core).

Jetzt habe ich eine "Legacy-ASP.NET-Anwendung" laufen, die sowohl als Webanwendung als auch als API dient.
Bei dieser konnte ich vor Jahren einen Request in einem Handler abfangen vor der Verarbeitung und die Controller- und Actionnamen anpassen, wenn nötig, z.B. so ...


/// <summary>
  /// Class for enabling hyphanated controller and action names
  /// </summary>
  public class HyphenatedRouteHandler : MvcRouteHandler {
    /// <summary>
    /// <see cref="MvcRouteHandler.GetHttpHandler(RequestContext)"/>
    /// </summary>
    protected override IHttpHandler GetHttpHandler(RequestContext requestContext) {
      requestContext.RouteData.Values["controller"] = requestContext.RouteData.Values["controller"].ToString().Replace("-", "").ToLower();
      requestContext.RouteData.Values["action"] = requestContext.RouteData.Values["action"].ToString().Replace("-", "").ToLower();
      return base.GetHttpHandler(requestContext);
    }

Hier kann man dann "saubere" Snake-Case-Urls verwenden, z.B. /cart-service/next-step und diese Mappen dann auf den Controller CartServcieController mit der dazugehörigen Action NextStep. (Bitte keine Diskussion, das ist nur ein Beispiel und ich würde das hier natürlich /cart/next nennen in produktiv) ...

Jetzt habe ich bei meiner neuen API ein ähnliches Problem, ich würde gerne an jedem Controller einen Postfix anhängen, finde aber nach Stunden der Suche im Web keine Hilfe.
Kann mir ggf. hier jemand helfen - es sollte doch jetzt immer noch möglich sein, oder?


 // Add routing
      app.MapControllerRoute(
        name: "api",
        pattern: "api/{culture}/{controller}/{action}/{ids?}",
        constraints: new { culture = @"[a-z]{2}" });

Hier hatte ich schon einen EndpointFilter hinzugefügt, aber leider sind hier die Controller/Action-Namen readonly und kann sie nicht verändern, bzw. komme gar nicht an das nötige Objekt ran, da es geschützt (internal) ist.

18.12.2022 - 19:23 Uhr

Hallo,

ich wundere mich zwar schon ein paar Jahre, aber da ich aktuell eine neue API aufsetze, frage ich mal hier, weil ich immer noch keine Lösung finde.

Wenn ich folgende Route konfiguriere, dann ...


      app.MapControllerRoute(
        name: "api",
        pattern: "api/{culture}/{controller}/{action}/{id?}",
        constraints: new { culture = @"[a-z]{2}" });

wird der Value des Parameters nur dann gemappt, wenn er genau id lautet. Warum ist das so, bzw. kann man das so ändern, dass der Name egal ist?
Oft verwendet man intuitiv passendere Namen, wie z.B. key, articleNumber ect. ....

Ich hab da so einiges ausprobiert, aber es scheint, dass bei culture, controller, action der Name völlig egal ist, wenn keine Einschränkung in constraints vorhanden ist, nur id muss genau id als Parameter heißen, sonst wird der Wert als null übergeben.

Ist das so in Stein gemeißelt oder hab ich einfach dazu nichts gefunden?

20.07.2019 - 16:47 Uhr

Mr Sparkle schreibt doch genau die Antwort. Wenn es Open Source gibt, warum dann nicht auch benutzen ... und meine Preisvorstellung hatte ich doch im Eröffnungspost mitgeteilt.

Problem ist doch auch oft, dass man was zahlt und davon nur paar Prozent wirklich benötigt, so wird dann das Produkt, welches man einsetzt halt sehr teuer.

Ich habe genau das gefunden, was ich benötige und der Preis ist (mehr als) doppelt niedriger als vorgestellt.

Klar muss Software auch was kosten und Unternehmen müssen auch ihr Geld verdienen, aber ich bin Softwareeentwickler und muss auch auf diesem Gebiet schauen, meinem Unternehmen hier die besten Lösungen zu präsentieren, denn sonst bräuchten sie keinen Softwareeentwickler und könnten sich über die Hintertür jeden "Mist" andrehen lassen - davon kann ich echt ein Lied singen ...

Geht mal auf verschiedene (Internet ect.) Messen, da haut es einem die Kinnlade runter, was Anbieter da zum Teil für Lösungen verlangen. Klar gibt viele Unternehmen, die Funktionen in ihrer 0815-Webseite möchten, aber keine Entwickler im Haus beschäftigen, dann wird eben "abgezockt" (zum Teil gewaltig) ...

Ich verstehe es ehrlich gesagt nicht. Warum soll man auch bei extern zugekaufter Software immer die erstbesten (aufgedrehten) Lösungen nehmen und nicht diejenigen, die im Preis/Leistungs/Anforderungsverhältnis am besten passen?

19.07.2019 - 04:58 Uhr

Danke euch nochmal allen für die Hinweise - hat mir sehr geholfen ...

Ich werde es jetzt mit dem Open-Source-Tool wkhtmltopdf probieren.
Gibt einen Anbieter, der für .NET einen Wrapper zur Verfügung stellt für einen für mich passablen Preis.

16.07.2019 - 22:31 Uhr

Hallo,

ich verstehe schon auf der einen Seite Deine Argumentation, aber ich bin Entwickler und kann doch mit ein paar Klicks das jetzt auch schon völlig kostenlos machen.

Zum Beispiel kann ich in OpenOffice ein Dokument erstellen und das dann als PDF speichern.
Jetzt muss es doch möglich sein, in so ein Dokument Platzhalter einzubauen, diese programmiertechnisch zu manipulieren und dann als PDF zu speichern ohne hunnderte (tausende) von Euros ausgeben zu müssen.

Ich kann es ja eigentlich jetzt schon völlig kostenlos machen (und das schon seit Jahren), nur ist das halt mühselig alles in eine Klasse zu packen ohne Trennung von Formatierung und Erstellungslogik.

Danke Dir erstmal für den Hinweis. Ich suche mal weiter und hoffe, eine Lösung zu finden, mit der ich leben kann.

16.07.2019 - 19:14 Uhr

Hallo,

wow ... war ich lange nicht mehr hier 😉 ...

Ich müsste ein paar PDFs generieren, welche sehr viele Produktinformationen (inklusive Tabellen und Grafiken) enthalten.

Nun kann man dies ja gut mit PDFsharp erstellen, aber mir graust es jetzt schon vor dem Quellcode mit den ganzen Paragraphen, Positionierungen, Formatierungen ext. - der Sourcecode sieht übel aus und zusätzlich kann nur ein Programmierer das dann auch noch ändern, also dachte ich an eine Art Template, welches dann ein Prozessor einliest und daraus ein PDF erstellt.

Bevor ich jetzt anfange selber was zu coden, dachte ich mal, ich frage hier, da ich im Internet nichts dazu gefunden habe - außer Lösungen die > 2k EUR kosten, was ich für zu teuer halte.

Habt ihr da Tools zu empfehlen, bzw. Erwahrungswerte mitzuteilen?
Ich würde gerne aus einem bekannten Format (z.B. JSON, XML, im Optimalfall HTML) die Beschreibung hinterlegen mit dynamischen Platzhaltern und ein Prozessor ersetzt die Platzhalter mit Daten und generiert aus der Beschreibung die PDFs.

Das hätte den Vorteil, dass das Layout schon mal getrennt wäre und auch sog. "Nichtprogrammierer" da Anpassungen durchführen könnten.

So ein Tool darf auch was kosten, denn man muss ja nicht immer das Rad neu erfinden, aber für sowas würde ich nicht mehr als 500 EUR ausgeben.

Was mich ein wenig wundert ist, dass ich dazu wenig finde. Ist denn das Problem nicht sehr oft in Unternehmen anzutreffen, aus einer Vorlage dann letztendlich PDFs zu generieren?

Thx euch schon mal vorab für etwaige Hilfe und Anregungen.

18.11.2015 - 14:18 Uhr

Hallo,

erst mal vielen Dank. Ich habe die letzten Jahre den IE "sträflichst vernachlässigt" 😉 ... das wäre eine Lösung meines Problemes - kann man irgendwo sehen, wie die Einstellungen sind, oder anders gefragt, wo kann man da was einstellen, bzw. sich einlesen?

Ich danke dir für den Hinweis, denn das hat mich wieder mal ein paar Stunden gekostet, weil es ja beim FF und Chrome funktioniert hat. 👍 😁

18.11.2015 - 13:05 Uhr

Hallo,

ich habe den sehr komischen Effekt, dass mit dem Internet-Explorer 11 auf meiner lokalen Umgebung alles funktioniert und auf Serverumgebungen (2008 und 2012) nur teilweise.
Mit Firefox und Chrome funktioniert es überall:

<html>
  <head>

  <script src="jquery-2.1.4.min.js"></script>

  <script>

    function addToTest() {
      var testElement = $("<div onclick=\"alert('Hey, Dude!')\">Klick Me!</div>");
      $("#toAdd").append(testElement);
    }

  </script>

  </head>

  <body>
    <div id="toAdd"><input type="button" value="Start!" onclick="addToTest()" /></div>
  </body>
</html>

Auf den Serverumgebungen wird zwar das JavaScript ausgeführt und die Div mit dem Text "Klick Me!" gerendert, aber das Ereignis wird nicht gefeuert.

Warum geht das jetzt nur auf den Serverumgebungen nicht? Ich habe schon alle Einstellungen durchprobiert.

Danke mal vorab für etwaige Hilfe.

P.S. Mir ist klar, dass ich das über einen Eventhandler hinbekommen könnte, aber das ist viel zu aufwändig, weil ich sehr viele Fremdbibliotheken verwende, wo genau solche Sachen eben nicht laufen, bzw. angezeigt werden.

Strange ist eben, dass es bei mir lokal auf allen Browsern geht und auf dem Server nur nicht mit dem Internet Explorer.

02.06.2015 - 12:43 Uhr

Ich bin der Meinung, dass hier die Fehleranfälligkeit gegen 0 geht und vom Standard auch nicht abgewichen wird, denn in meinem Fall handelt es sich um eine Option, die Usern anbietet, die Formatierungen nach ihrem Gusto einzustellen völlig unabhängig von der Culture der Laufzeitumgebung und Herkunft der User, bzw. der eingestellten Sprache.

02.06.2015 - 12:04 Uhr

Ich danke euch für die Anregungen.

Ich hab es jetzt mit dem NumberFormatInfo-Objekt gelöst.

Beispiel für user a:


Dim deci As Decimal = 2500.5
Dim nfi As NumberFormatInfo = New NumberFormatInfo()
nfi.NumberDecimalSeparator = ","
nfi.NumberGroupSeparator = "."
 Console.WriteLine(deci.ToString(",#.00", nfi)) // ==> 2.500,50

und das geht auch unabhängig von der aktuellen (Thread) CultureInfo 👍

02.06.2015 - 09:41 Uhr

Hallo,

ist es möglich in C# Nummern, z.B. Decimal verschieden zu formatieren nur anhand eines Patterns / Expression ohne Cluture-Objekten?

Ich kenne das nur mit den Culture-Objecten (IFormatProvider) - ist es auch irgendwie anders möglich.

Beispiel. Ich habe die Zahl 2500.50 (englisch standard, also so in der DB), jetzt gibt es auf der Applikationsumgebung jeweils zwei User aus Deutschland und USA und jeweils auf einem en-US-System und auf einem de-System, welche die Zahlen unterschiedlich angezeigt bekommen möchten.

(de) User a) 2.500,50
(de) User b) 2,500.50
(us) User c) 2.500,50
(us) User d) 2,500.50

Gibt es da eine Möglichkeit das an einem Pattern (# und / oder 0) festzumachen ** OHNE ** eine CultureInfo, bzw. IFormatProvider?

28.05.2015 - 22:40 Uhr

Hi,

also, ich verstehe das jetzt überhaupt nicht. Was hat denn HTTP damit zu tun ob man eine neue Instanz von, siehe obiges Beispiel, Auction erstellt oder eine gebrauchte, bzw. registrierte manipuliert? 🤔

Der liest im Endeffekt nur aus dem Request die Parameternamen und schaut mittels Reflection ob es in der Klasse die jeweiligen Properties gibt. Warum soll man da eine neue Instanz (IMMER) erstellen müssen?

Ich muss jetzt in der Session zwischenspeichern und rübbermappen, das ja auch nicht sehr schön, aber ich muss das so machen, da ich die "Entities" auch in anderen (nicht MVC) Projekte in einem separatem Service/Model Projekt benutze. Ich möchte ja nicht auf die Datenbank gehen und erst schauen, ob im Request neue Werte vorhanden sind und IMMER speichern möchte ich auch nicht, weil ich das unprofessionell finde. Ich speichere nur, wenn sich etwas geändert hat.

Ich sehe ja irgendwie ein, dass es nicht geht, aber warum es NICHT GEHEN darf, bzw, was es mit HTTP zu tun haben soll erschließt sich mir überhaupt nicht.

28.05.2015 - 18:22 Uhr

Das ist jetzt Philosophie. Für mich ist CRUD-Funktionalität (zum Darstellen, Mappen und Wegschreiben in Basisklasse mittels Serviceaufruf), Formatdarstellung, Sprachsteuerung und Berechtigungsprüfung immer das selbe und keine Logik und für mich jederzeit zentral auslagerbar. Nur darum geht es mir - das ist keine Logik für mich.

Das Model ist bei mir völlig in einem anderen (neutralen) Projekt mit Servicemethoden weggekapselt.

28.05.2015 - 18:16 Uhr

Mir wäre es lieber, das Framework würde auf das Ursprungsmodelobjekt mappen - da kenne ich mich noch nicht so aus, wie das gehen sollte, weil aktuell erstellt er immer als Parameter für die Action eine neue Instanz des Modelobjektes.

Siehe Seite 41 in dem von dir verlinkten Buch: "Model binding complex objects"

Vielen Dank für den Hinweis. Das Problem ist aber gerade, dass bei dem Beispielcode:

public ActionResult Create(Auction auction)
{
 // ... Hier kommt die auction als neue Instanz, ich brauch die registrierte Instanz auf welche dann die Requestparameter gemapped werden.
}

Das Modelobjekt "Auction" eine neue Instanz ist und genau das würde ich sehr gerne vermeiden, weil ich dann sehr viel "Zusatzaufwand" habe, da ich dann in einem Filter ein "Zurückmappen" durchführen muss. Ich habe in allen Modelobjekten schon in den Basisklassen alles was ich brauche (Touched- bzw. Dirtyflag, Caching usw.)
Es sieht so aus, dass das nicht geht. X(

28.05.2015 - 17:50 Uhr

Hallo,

sorry, dann habe ich mich auf die Schnelle falsch ausgedrückt, Ich hab schon Erfahrungen mit Webanwendungen und auch das PDF-Buch durchgelesen https://anhtan1987.files.wordpress.com/2014/12/programming-asp-net-mvc-4.pdf

Ich denke, dass ich es schon verstanden habe, weil ich 2005 schon mit Struts / Java gearbeitet und da ist vieles ähnlich, Filter, Model, Actions ect.

Das Problem welches ich habe ist, dass bei einem Post an dem URL alle Parameter (gehängt) werden, die vorher vorhanden waren. Das schaut unschön aus. Mir wäre es lieber, das Framework würde auf das Ursprungsmodelobjekt mappen - da kenne ich mich noch nicht so aus, wie das gehen sollte, weil aktuell erstellt er immer als Parameter für die Action eine neue Instanz des Modelobjektes.

28.05.2015 - 17:45 Uhr

Hallo,

ich möchte den Code aber nur ein einziges mal schreiben.
Nehmen wir an, ich habe eine globale ID "TEST123" festgelegt in der Administrationsmaske, dann möchte ich in der View eigentlich nur noch @RenderFor("TEST123") schreiben und in RenderFor passieren dann verschiedene Dinge, wie Berechtigungsprüfung, Laden Language für Label, bzw. Codes für IDS, welches Tag gerendert werden soll, und genau hier dann je nach Tag, z.B. INPUT, TYPE TEXT die jeweiligen Razor Rendermethoden aufrufen. Ich könnte auch für jedes Tag eine eiene View erstellen, aber dann hab ich mehrere Stellen zu pflegen, Name, class, Id usw.

28.05.2015 - 16:24 Uhr

Hallo,

ich bin gerade neu eingestiegen in MVC und hätte da eine Frage bezüglich dem Mapping von Parametern auf ein Model Objekt.

Aktuell habe ich ein Objekt und gebe im Controller dieses als Model zurück für die View.
In der View schreibe ich dann

@Using (Html.BeginForm("ActionName", "ControllerName", Model))

jetzt habe ich aber folgende Probleme:

a) Wenn ich hier explizit method Type "POST" angebe, dann macht er mir einen ganz häßlichen Requeststring mit den ganzen Parametern - lasse ich das POST weg, werden auch die Formdaten geposted, aber nur die Felder, welche auch bearbeitet werden auf der View, so ist z.B. eine ID dann weg 🙁

b) Wie kann ich sicherstellen (wenn überhaupt möglich), dass er die bestehende Instanz verwendet, denn aktuell legt er (bedauerlicherweise???) eine neue Instanz an und nimmt nicht das initiale Modelobjekt. Wahrscheinlich macht er das dann später anhand von dem Actionparameter? Kann man das nicht gleich festlegen, bzw. mitteilen, dass er die Instanz verwenden soll, weil das würde mir sehr viel Arbeit sparen, denn ich habe in den Objekten eine Art Cache um feststellen zu können, ob auch wirklich Änderrungen durchgeführt wurden. So müsste ich jetzt nochmal (Session) zwischenspeichern und dann selber mappen in einem Filter. 🙄

Ich will hier erst mal auf Nummer sicher gehen und nachfragen, nicht dass ich dann wieder umsonst sehr viel Arbeit mache, weil man doch irgendwo einstellen kann auf welches Objekt er mappen soll.

Danke schon mal im Voraus für etwaige Hilfe.

28.05.2015 - 16:10 Uhr

Dank euch für die Hinweise.

Das "CMS-like" sollte kein Problem werden. Ich muss mir nur noch zusammensuchen, wie ich einen eigenen Helper programmieren kann und in diesem im Optimalfall die "Code-Behind-HTML-Tag-Generierungsmethoden" von Razor je nach Gebrauch aufrufen kann und das gerenderte HTML dann zurückgeben.

28.05.2015 - 11:23 Uhr

Ich mach mal den Fred wieder auf. Ich habe mich jetzt eingelesen in MVC und das werde ich auch verwenden. Jetzt stellt sich mir weiterhin die Ausgangsfrage.

Ich würde gerne soviel wie möglich wegkapseln und bin mir noch nicht im klaren, wie ich das mit MVC umsetzen kann.

Wenn ich z.B. mittels MVC ein Textfeld darstellen möchte mit Label, würde ich auf der Template-Seite u.a. folgendes schreiben:

@Html.LabelFor(model => model.Name)
 @Html.EditorFor(model => model.Name)

... würde das jetzt noch in Verbindung mit Berechtigung, Mehrsprachigkeit und Zugriffssteuerung (Readonly ect.), müsste ich schon ein paar Abfragen mittels Razor drum rum basteln, was ich aber unbedingt vermeiden möchte.

Ich würde gerne eine globale ID vergeben, z.B. "LOG12NAME" in einer Administrationsmaske. Hier definiere ich das Mapping (Datenbank), Berechtigungen und Sprachsteuerung.

Ich würde dann gerne auf den jeweiligen .*html-Template-Seiten nur noch (mittels HTML-Helper?) in etwa so etwas stehen haben wollen:

@RenderFor("LOG12NAME")

Je nach Berechtigung, Sprachsteuerung und Zustand, wird dann das Tag mit dem Label gerendert.

Wie kann ich sowas angehen, bzw. umsetzen? Als Partial View eher nicht denke ich. Gibt es die Möglichkeit einen eigenen Helper zu basteln, der direkt eine Klasse aufruft - dort könnte ich dann die Abfragen machen. Dann stellt sich die Frage, ob ich im Quellcode an die "Code-Behind-Razor-Methoden" zum rendern von HTML-Tags komme, z.B. Html.LabelFor oder Html.EditorFor.

06.04.2015 - 17:50 Uhr

Naja, zur Not kann ich auch eine .ashx-Klasse machen als "zentralen Server-Controller", welche die angeforderten Seiten (HTML-Templates) lädt und an das Clientscript als AJAX-Response demenstprechend gerendert zurückliefert. 😁

Ne, mir ist schon klar, dass die JavaScript-Libraries keine Bestandteile von ASP.NET sind, aber ich glaube mal gelesen zu haben, dass Microsoft das aktiv (zumindest jQuery) supported und dann hat man doch schon mal ein gewichtiges Argument, wenn man es auch verwenden möchte in der Firma.

Ich werde mal die nächsten Tage mich einlesen in Angular und MVC und dann eine Lösung für mein Problem finden.
Wichtig wäre mir nur, dass man die Forumlarobjekte, welche man generieren muss, auch als Objekte auf dem Server ansprechen kann und nicht mittels (Regex) Parsing der HTML-Templates) sich das alles selber zusammenbauen muss. Ich stelle mir das (aktuell) so vor, dass man das HTML-Template lädt auf dem Server, und dann die Controls demenstprechend manipuliert, bzw. wegen Berechtigung, erst gar nicht anzeigt, und hier würde ich die Controls gerne als Objekte ansprechen, so wie es im "klassischen" ASPX mit Webforms auch möglich war. Dann wird die fertige Seite als Response dem AJAX-Aufruf zurückgegeben. JavaScript wäre dann auf dem Client nur dafür da, die benötigten Seiten zu laden und darzustellen und (Submit) Validierungen durchzuführen. Die Logik soll weiterhin auf dem Server stattfinden.

Dank dir erst einmal für die Hinweise! 👍

06.04.2015 - 17:09 Uhr

@Abt,

naja, ich verwende die WebForms ja noch gar nicht, ich kenne sie nur, bzw. bin ich da "ausgestiegen" damals ...
Ich hab die letzten Jahre nur Desktopanwendungen gemacht oder Chrome/FF-Extensions programmiert. 😁

Letztendlich rendern doch alle Technologien HTML(5)-Code, wenn ich das richtig verstanden habe?

Ich hab mal kurz MVC angesehen und mir ist da bisschen anders geworden, weil ich es nie leiden konnte, wenn im Hintergrund Zeugs generiert wird, was man nur zu 5 Prozent benötigt. 😉 ... ich mag lieber "thin- and clean"-Sachen, wo man zur Not selber Hand anlegen kann.

Ich schau mir jetzt mal näher Angular an. Ist Angluar, wie jQuery, mitlerweile auch fester Bestandteil von ASP.NET, bzw. wird (offiziell von Microsoft) unterstützt?

06.04.2015 - 16:14 Uhr

Hallo,

ich mache mir gerade ein paar Gedanken, wie ich für einen Betrieb ein Webframework machen kann und u.a. stelle ich mir es so vor, dass man auf einer Administrationsseite für jede Seite Controls definieren kann und diese gleich mit Datenbankspalten verknüpfen kann, so dass man sich zentral um Internationalisierung, Berechtigung, Validierung, Binding usw. kümmern kann.

Da wir absolut keine klassischen Seiten machen möchten, also, wo der Browser den Response bekommt und nach einem Serverroundtrip die komplette Seite lädt, soll alles über AJAX laufen, so dass das Verhalten einer Desktopanwendung nachgeahmt wird.

Jetzt stellt sich mir die Frage, wie ich die Controls aufbaue. Ich könnte komplett auf *.aspx-Seiten verzichten und meine eigenen Tags ausparsen auf dem Server und HTML wegschreiben oder ich könnte es über sog. User-Controls lösen - diese müssten dann aber nested unterstützen, ist das der Fall, hat da jemand Erfahrungen.

Aufgrund der Firmenphilosophie muss es eine .NET-Anwendung sein, bzw. muss als Webserver dann auch der IIS laufen.

Ist sowas (also nested) in etwa möglich mit klassischem ASPX-Usercontrols?


<company:control key="xyz">
  <div>Hello World to english speakers!</div>
  <company:control key="123">
    <span>Hello Admin, you can see me!</span>
      <company:control key="AAA">
        <!-- will render <input type="text" data-validation value="Hey, Dude!" /> -->
        <!-- or framework tag usage <asp:TextBox></asp:TextBox> -->
      </company:control>
  </company:control>
</company:control>

Ggf. andere Ideen? Es war sehr, sehr viel Überzeugungsarbeit nötig, um überhaupt jQuery einsetzen zu dürfen - also weitere Libraries sollten nicht verwendet werden.

05.04.2015 - 19:20 Uhr

OK, jetzt doch noch gelöst und zwar (universal), egal ob lokal oder im Internet.

Das berühmte Häckchen "Delete browsing history on exit" muss deaktiviert werden, welches standardmäßig aktiv ist. 😁

Gott sei dank erledigt. 👍

05.04.2015 - 18:57 Uhr

Fu***, ich dreh durch 😁

Wenn ich das IE-Fenster zumache und innerhalb von 5 Sekunden ein neues aufmache, dann geht es, nach 5 Sekunden ist alles wieder weg, wtf?

Ggf. liegt es daran, dass noch nicht alles komplett aufgeräumt wurde und alte Sachen beim Neustart wiederverwendet werden.

Ich werd aus diesem Verhalten nicht schlau.

Nachtrag:
Auch aus einem fremden Netz heraus wird dann der Wert wieder zurückgesetzt nach bestimmter Zeit. Verhalten wie ein sessionStorage-Objekt auch im Netz. Muss man da im IE was einstellen?

05.04.2015 - 18:51 Uhr

Ich hab den Fehler gefunden:

Ich muss wirklich EXPLIZIT die Werte mit setItem und getItem abfragen.

Ein Beispiel. Wenn ich eine variable xyz den Wert "Hello, World" zuweisen möchte, dann geht es im Internet Explorer nur in einer Session mit:

locaStorage.xyz = "Hello, World";
alert(localStorage.xyz)

Bei den anderen Browsern funzzt das auch über eine Session hinweg.
Beim Internet Explorer nicht, da muss man dann folgendes verwenden, was auch in allen anderen Browsern funktioniert.

locaStorage.setItem("xyz", "Hello, World");
alert(localStorage.getItem("xyz"))

Naja, wieder was gelernt. Vielen Dank für deine Hilfe.

05.04.2015 - 18:17 Uhr

Sicher, dass Du localStorage und nicht sessionStorage verwendest?
Was sagt der Chrom Debugger zum aktuellen Zustand (F12) bzw. Firefox Developer (nicht der normale FF).

Nachtrag:

Wenn ich aus einem fremden Netz die Domain aufrufe (in meinem Netz), dann funzzt es auch im IE. Wenn ich aus meinem Netz die Domain aufrufe, dann verhält es sich wie ein sessionStorage-Objekt.

Chrome und FF funktionieren einwandfrei, so wie erwartet. 🤔

05.04.2015 - 18:00 Uhr

Ich hab das jetzt nochmal ausprobiert mit einer Domain im Web. Funktioniert da komischerweise auch nicht.

Ich rufe eine Domain im Netz auf und lasse mir eine Variable vom localStorage anzeigen und setze danach einen default-Wert.
Immer, wenn ich die Seite in einem neuen Fenster aufrufe, dann ist das Teil empty. Bei einem Refresh im Browser ist das Teil gesetzt.
Das Verhalten ist wie bei einem localSession-Objekt. WTF? 🤔

05.04.2015 - 17:31 Uhr

Ich muss jetzt doch noch einmal den Thread hier öffnen.
Ich habe lokal eine Domain vergeben für den lokalen IIS und dann funktioniert es im IE auch nach einem Refresh in der gleichen Browsersession - was vorher nicht ging.

Nun ist es aber immer noch so, wenn ich eine neue Browsersession öffne mit neuem Fenster, dann sind die Einstellungen wieder weg ... wtf?
Ich kann mir nicht vorstellen, dass man im Intranet diese Funktionalität nicht benutzen kann.
Es muss doch auch möglich sein für "Web-"Applikationen, die im lokalen Netzwerk laufen? 🤔

04.04.2015 - 22:36 Uhr

Vielen Dank, du hast mir mal wieder helfen können.
Mit einer lokalen Domain funktioniert das auch im IE und zwar über eine Session hinweg 👍

... da muss man erst mal draufkommen. 🙂

04.04.2015 - 20:12 Uhr

Hallo,

ich hab jetzt seit ein paar Tagen immer mal wieder eine zeitlang nach einer Lösung, bzw. Bug, gesucht und finde einfach nichts für das "simple Problem".

Ich habe in einem lokalen Netzwerk eine Webanwendung, welche lokal auf den Clients das LocalStorage Objekt benutzt für Benutzereinstellungen.

Chrome und die neusten FF-Versionen laufen so, wie sie auch sollen, nur der Internet Explorer "zickt" rum und verhält sich so, als ob es sich um ein LocalSession Objekt handelt, das bedeutet, während der Session speichert er alles so wie es auch sein soll, aber wenn ich eine neue Session aufmache, dann sind die Einstellungen alle weg.

Vielleicht "stolpert" hier einer mal drüber und kennt das Problem, denn ich weiß jetzt aktuell auch nicht weiter - dachte, dass es MSIE 11 unterstützt, weil ich auf dem 9er das Phenomän beobachtet habe und dann auf MSIE 11 ein Update durchgeführt habe aber mit dem gleichen Ergebnis.

Wer benutzt eigentlich diesen Dino noch? - Leider muss ich den auch unterstützen 😜

Also, in einer Session funktioniert alles aber sobald ich eine neue aufmache oder ein neues Fenster öffne im IE, dann ist alles weg - sehr komisch. 🤔

08.03.2015 - 20:41 Uhr

.... noch nie einen vernünftigen Grund gehört ...

😁 .. klar, den gibt es auch nicht, aber in vielen Betrieben gibt es auch keine "Vernunft", oder (zugegeben etwas zynisch) anders ausgedrückt. Wie erkläre ich einem Blinden die Farben (gefühlter) Teil 27 😉

Danke für den Hinweis, ich werde mal reinschauen.

08.03.2015 - 20:00 Uhr

verwendetes Datenbanksystem: Oracle Database 11g Express Edition

Hallo,

NHibernate ist nicht (aus betriebsinternen Gründen), deshalb bastele ich gerade in meiner neuen Firma so eine Art OR-Mapper (bitte keine weiteren Fragen warum, bzw. nich Entity-Framework usw.)
Nun möchte ich aus Debuggründen mir die ausgeführten SQL-Statements anzeigen lassen.
Muss ich mir die SQL statements, so wie sie "abgefeuert" werden selber zusammenbauen, also selber die Parameter in den SQL-Befehlen ersetzen oder komme ich irgendwie nach dem Execute innerhalb des OracleCommand-Objekts an den ausgeführten Query?

07.03.2015 - 14:30 Uhr

Vielen Dank für die Lösung und gleich noch was zusätzlich gelernt! 👍

07.03.2015 - 14:12 Uhr

Hallo,

ich brauche von einem Property den aktuellen Wert und einen bestimmten Wert von einem Property-Attribute.

Jetzt ist ja die "herkömmliche" Vorgehensweise so, dass man mit GetProperty("PropertyName") eine Instanz von PropertyInfo erhält und dann kann ich mittels GetValue an den aktuellen Wert kommen und mit GetCustomAttributes eben an den Attributewert.

Was mir an dieser Lösung nicht gefällt ist der "fest verdrahtete" String in der GetProperty-Methode.
Klar, ich kann Konstanten festlegen, aber ich stelle mir die Frage, ob es nicht eine schönere Lösung gibt, wo mittels der Property der Klasseninstanz die Werte abgefragt werden können.

Bei Threads ist es doch auch so, dass man mit dem Delegate den Methodennamen angibt.

Ich hätte gerne eine Lösung in der Art:


// The classic way
PropertyInfo propertyInfo = this.GetType().GetProperty("Description")
// The other way?
PropertyInfo propertyInfo = this.GetType().GetProperty(this.Description[Delegate?].getName())

Description ist der Name des Properties, ich möchte direkt mit der Instanz arbeiten, so dass ich den fest verdrahteten String, hier "Description" vermeiden kann.

Geht das irgendwie?

05.02.2014 - 22:56 Uhr

Also, ich habs jetzt auf x86 gestellt und geht auch nicht ... hab VS2010 auf 64 Bit Windows 7 Ultimate .. ich muss da irgendwann mal verstellt haben, anders kann ich mir das nicht erklären. Ich bin mir 100 Prozent sicher, dass ich von catch in try-Block verschieben konnte, nachdem die Exception beim Breakpoint im catch-Block angehalten wurde.

05.02.2014 - 15:31 Uhr

Also, bei mir geht das nicht mehr, wenn eine Exception geworfen wurde und ich einen Breakpoint ins catch setze. Bleibt stehen und ich kann nicht mehr verschieben, bzw. wenn ich die Maustaste nach dem Drag loslasse passiert nix .... ich hab das oft benutzt um so schnell den Fehler zu finden, dass ich dann aus dem catch an die Stelle geschoben hab, wo ich den Fehler vermutet habe (klar, man kann auch in Stacktrace schauen und, und und ... aber das dauert halt) ...

Aktuell kann ich nur noch "schieben", wenn keine Exception geflogen ist - das funktioniert weiterhin - hm, sehr komisch ... sind alles Any CPU-Projekte

04.02.2014 - 17:02 Uhr

Ich erklär es nochmal.

Ich setze irgendwo einen Breakpoint und der Code stopt an der Stelle. Jetzt war es vorher immer möglich, dass ich rechte mit der Maus über den Breakpoint gefahren bin (in dem sich jetzt ein gelber Pfeil befindet) und just in dem Moment, wo ich mit dem Mauszeiger über dem Breakpoint bin, ändert sich das Mausicon zu einem schwarzen Pfeil - wenn ich jetzt die linke Maustaste gedrückt habe, konnte ich den Breakpoint per drag in eine x-beliebige Zeile schieben - ich hab das immer verwendet um in eine Zeile möglichst vor dem Fehler zu navigieren und dann eben "ganz normal" mit Step Over weitergemacht von der "neuen Zeile"

Hm, ist es jetzt verständlicher? Ich hoffe es 😁

du meinst wohl, du möchtest die aktuelle Ausführungszeile ändern (current line), d.h. den gelben Pfeil?

Ja, genau das meinte ich - ich kann die Zeile mit dem gelben Pfeil "ganz normal, wie gewohnt" verschieben, wenn keine Exception geworfen wurde, aber bei Exceptions funktioniert das bei mir nicht mehr und genau da brauch ich es aber überwiegend - hm, da muss ich wohl mal was verstellt haben 🤔

04.02.2014 - 14:50 Uhr

Hallo,

ich kann bei meiner aktuellen Konfiguratiion den Breakpoint, wenn eine Exception geworfen wird, nicht mehr bewegen - wo kann man das einstellen?

Problem ist: Ich setze den Breakpoint in die catch-Anweisung und möchte dann, wenn er dort stehenbleibt, in die try-Anweisung navigieren, um so den Fehler zu finden - hab das jahrelang so gemacht, aber aktuell geht das nicht mehr bei meiner Konfiguration - arbeite mit VS2010.

Vielen Dank für Hilfe schon mal im voraus.

14.11.2013 - 16:11 Uhr

Mein Gott, vielen, vielen Dank - Norton war es .. wenn ich den kurz deaktiviere, dann funzzt alles wie gewohnt ... da wär ich nie draufgekommen 👍

14.11.2013 - 15:51 Uhr

Hallo,

ich hoffe, mir kann jemand helfen - ich hab heute schon 3 Stunden Arbeitszeit damit "verbraten" ... seit heute dauert das starten von Programmen (egal ob aus der IDE oder EXE) immer vorab 30 Sekunden - es passiert vorher nichts. Auch in der Entwicklungsumgebung, wenn das Programm schon läuft und ich einen Breakpoint setzen möchte, dann erscheint die "berühmte" Sanduhr und ich muss 30 Sekunden warten, bis der Breakpoint gesetzt wird - so kann man nicht arbeiten.

Hat jemand eine Idee? - ich hab die suo-Datei, alle obj-Dateien und die kompletten Usereinstellungen unter Users\AppData auch schon gelöscht - hat alles nichts gebracht ... da dreht man ja durch ... Neustarts helfen auch nix. X(

13.11.2013 - 15:33 Uhr

Hi,

gibt es eine Möglichkeit bei einem TreeView festzustellen ob eine Scrollbar aktuell angezeigt wird oder nicht? - ich bräuchte das, weil ich dann je nach dem globales Scrollen des Hauptpanels zulasse oder eben scrollen in der TreeView, wenn Scrollbar sichtbar - hab da nichts gefunden bis jetzt.

11.04.2013 - 11:31 Uhr

Oh man, die stellen zweimal die gleiche Regel (RD und Remote Desktop (TCP eingehend)) initial zur Verfügung .. klar, dann kann es net gehen. 😭

10.04.2013 - 19:34 Uhr

Hi,

ich bin wahrlich kein Administrator, hatte aber bisher immer vServer mittels IP-Adresse in der Windows-Firewall unter (inbound -> Scope) und dann eben die zulässigen IP-Adressen eingetragen - hat bisher immer funktioniert.

Jetzt hab ich aktuell einen vServer von HostEurope und der (Firewall ist natürlich auch aktiv) ignoriert das vollkommen - egal was ich da einstelle, ich komm von jedem Rechner aus druff - auch nach Neustart.

Muss ich da noch was einstellen oder ist das "Problem" von HostEurope?

Hier die Einstellungen: Remote-Einstellungen Screenshot

Gruß und Danke schon mal für etwaige Hilfe im Voraus!

01.04.2013 - 21:42 Uhr

OK, vielen Dank für die Antworten.

Wäre jetzt ja nicht mein erster Appender: log4Net - ArchivRollingFileAppender ... ich dachte halt, ich frag erst mal hier nach, bevor ich mit einem Appender beginne, weil evtl. es schon eine Lösung gibt, die mir nicht bekannt ist - man soll ja net immer das Rad neu erfinden (sonst werden wir ja nie fertig)

Gruß und Danke für die Antworten und Anregungen.

01.04.2013 - 08:05 Uhr

Hi,

ich benutze log4net beim Logging und hätte mal eine Frage bezüglich von zyklisch auftretenden, identischen Fehlern - kann man das irgendwie innerhalb des Frameworks handeln oder muss man da was eigenes programmieren?

Ein Beispiel wäre eine Verbindung, die nicht zur Verfügung steht für 5 Minuten, aber in einem Thread wird jede Sekunde versucht auf die Verbindung zuzugreifen. Ohne weitere Anpassungen hat man jetzt im Logfile 300 identische Fehlermeldungen stehen, dass die Verbindung nicht vorhanden ist - klar, kann man da schnell selber was programmieren, dass nur beim 1. Auftreten des Verbindungsausfalles gelogged wird und danach nicht mehr ... war aber nur ein Beispiel von vielen, um die Problematik verständlich zu machen.

Meine Frage jetzt. Gibt es da schon was - Problematik tritt ja sehr häufig auf im Zusammenhang mit Threads und zeitkritischen Sachen, gerade bei Connections (Internet, Datenbanken) oder Fileverarbeitung auf.

Gruß und Danke schon einmal für etwaige Antworten im Voraus!

06.03.2013 - 13:04 Uhr

Hallo,

gar keine so schlechte Idee .. ich werde da mal reinschauen:

http://developer.chrome.com/extensions/tabs.html

05.03.2013 - 12:48 Uhr

Hallo,

hat von euch jemand eine Idee, wie man Tabs in Chrome schließen kann?
Problem ist bei mir, dass ich, Situation vorausgesetzt, zig gleichartige Tabs in Chrome offen hab und ich möchte die soz. verwalten und alle unnützen schließen mittels einem C#-Programm.

Alternativ würde es mir natürlich auch ausreichen, wenn ich ein benötigten Tab eben nicht doppelt öffnen würde, sondern bei Bedarf einfach aktiv schalten, bzw. einfach rechts-außen im Browserfenster zu positionieren.

Es geht eben darum, einen geöffneten (nicht aktiven Tab) bei Bedarf sofort aktiv zu setzen, bzw. ihn im Browserfenster sofort zu sehen - aktuell ist es so, dass es viel schneller geht, mittels C# einen Tab nochmals aufzumachen (welcher dann ja aktiv ist) als "ewig" den bereits offenen zu suchen - also, ist eben sehr zeitkritisch und dann, bei Hochbetrieb, hab ich schon mal zig Tabs offen, von denen viele doppelt und mehrfach vorhanden sind.

Hat hier jemand eine Idee, wie man das angehen kann - Command Lines scheint er nicht zu verstehen - bisher hab ich dazu nichts gefunden.

Danke schon mal für etwaige Hilfe im Voraus.