Ich würde ein ViewModel erstellen. Dieses kann bspw. ein Property haben "bool Authorized". Alle Buttons binden Ihr Enabled Property nun auf dieses ViewModel Property "Authorized".
Es gibt dafür einige Komponenten welche das können, wenn du nach "replace fonts in pdf c#" googelst, findest du diese
Ich würde das nicht selbst machen wollen, hoffe du kannst eine fertige Komponente einsetzen.
Am einfachsten ist das Vorgehen etwa so:
PDF laden
Verwendete Schriftarten ersetzen
Wenn du dies nur für gewisse Texte machen willst etwa so:
Ich würde Dir von FTP abraten (auch von den sichereren Varianten wie FTPS oder SFTP). Nutze dafür besser eine REST API (bspw. ASP.NET Core Web Api) und lege die Bilder in einem BlobStorage ab. Die Authentifizierung kannst du da bspw. über ein Token im Header machen... (OAuth, ...)
Irgendwo brauchst du ein Backend um Pub/Sub (siehe erste Antwort) zu managen. SignalR kannst du im Frontend einsetzen um anhand von Notifications eines WebHook im GUI etwas anzuzeigen oder was anderes zu wurschteln :-)
Eigentlich stellst du Events zur Verfügung. Die Subscriber können solche abonnieren um über "Änderungen" informiert zu werden. Dafür kannst du bspw. ein Pub/Sub Pattern verwenden.
Ein schöner Artikel mit ausführlichen Beschreibung findest du in diesem Blog.
Problem:
-> Die Klasse besitzt kein Interface
-> Die Methode GetValidators ist nicht virtual
-> _cacheEntries ist private
Was ich versucht habe:
-> Von der Klasse erben und GetValidators "hiden" mit new GetValidators(...)
Es wird zwar meine Klasse verwendet jedoch klappt das "hiden" nicht wirklich, es wird die Basis-Methode aufgerufen.
Jemand eine Idee?
Ziel:
-> Properties von meinem Model können zur Laufzeit bspw. mit "Required" markiert werden. Serverseitig funktioniert alles (ModelBinder sind ja schön erweiterbar ...), jedoch werden die client-validatoren gecached und ClientValidatorCache ist nicht wirklich gut erweiterbar... Dies führt dazu, dass der gecachte validator benutzt wird ungeachtet der neuen ValidationMetaData.
Dann könntest du den String in den Enum parsen und damit rechnen.
(MyEnum)Enum.Parse(typeof(MyEnum), stringInput);
Ich würde mir überlegen anstatt TextBoxen dann gleich DropDowns zu verwenden, dann kannst du den Value definieren. Dann könntest aber auch auf den Enum verzichten und als Value für Januar gleich 1 verwenden.
=> FormatException bedeutet, der string wurde nicht als "Double" erkannt. Die hat warsch. mit CultureSettings zutun. (Culture Invariant)
Als Tipp:
=> Ich würde es eher etwa so aufbauen:
BasisKlasse Währung
Alle Währungen erben davon (jede soll eine Klasse sein) und überschreiben bspw. den WechselKurs. Dein Code würde sich dann auf etwa 2 Zeile reduzieren àlà
doubleEingabe * (comboSelectedItem as Waehrung).Kurs.
Zudem könntest du dann später sehr einfach die aktuellen Kurse einfach von EZB oder ähnlichem laden usw...
Schau Dir ggf. mal Vererbung an.
Ich hoff diese Beitrag kommt noch durch bevor der Thread wegen "Absoluten Grundlagen" geschlossen wird.
Hm, es gibt ja 2 Einstellungen, einmal die vom ConnectionString für die Verbindung und dann noch das CommandTimeout. ( Führen jeweils zu einem anderen Fehler, wenn Vorgang länger dauert )
Selbst wenn ich lokal auf die AZURE DB zeige, und mein Initializer aufrufe erhalte ich den TimeOut Fehler.
m_db.Context.Database.Initialize(force);
Wenn ich vorher aber ein SQL STATEMENT absetze:
CREATE DATABASE ...
Danach den Initializer laufen lasse, klappt es ohne den Timeout fehler.
Meine DB hat etwa 10 Tabellen und vielleicht 50 Datensätze initial. Also absolut lächerlich.
Eine Idee ?
Der Fehler lautet:
Fehler
Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding. This failure occurred while attempting to connect to the routing destination.
( Der ConnectionString Timeout Fehler würde etwas anders lauten, weiss gerade nicht mehr... )
EDIT:
=> Vielleicht eine noch wichtige Anmerkung :-) Das besagte Verhalten habe ich erst seit ich AZURE 2.6 und EF 6.1.3 verwende
verwendetes Datenbanksystem: <Azure SQL> -> EF 6.1 -> CodeFirst
Liebe Leute
Wenn ich mein Projekt deploye auf AZURE erhalte ich immer ein TimeOut (SQL AZURE).
(Beim erstellen der DB, Seed wird erst gar nicht aufgerufen)
Nach langem Testen und Debugen ist mir dabei folgendes aufgefallen:
=> DB wird erstellt ohne Tabellen
=> TimeOut.
Wenn ich die DB aber per SQL selbst erstelle, danach den Initializer aufrufe, klappt alles.
Ich behaupte also dass die Eigenschaft CommandTimeOut für die Erstellung der Datenbank auf dem Context ignoriert wird. (Bei Azure dauert das anlegen einer DB gut mal 40-50 Sekunden, default ist 30 Sekunden TimeOut).
Kann das jemand bestätigen oder hat ähnliche Erfahrungen ?
Diese Lib würde alle Anforderungen unterstützen, nur das LoadFromStream für die gratis Version nicht verfügbar ist und nur LoadFromFile geht :-( und 600 Dollar um ein paar PDF Thumbs zu haben ist doch nicht ganz billig :-)
Da ShellFile das File von Windows representiert, sind Thumbs nur verfügbar wenn die entsprechenden Programme auch auf dem Server installiert sind, daher ist es für WEB sowieso das Falsche.
Kann ich wenn ich in dem Item_Command Event bin und dort die Datenbankaktualisierung mache, eine Messagebox aufrufen die sowas beinhaltet wie "Sind sie sicher?"
Also eine MessageBox gibts nicht ;-). Dein Vorhaben ist nicht ganz trivial.
Der einfachste Weg wäre:
=> Den "Update" oder "Save" (Link,Button whatever) eine client Methode hinzufügen, z.B. confirm.
Alternativ geht auch:
=> Serverseitig kannst du ein Script registrieren. (Um bspw. im Item_Command Event dann ein Confirm anzuzeigen oder was auch immer)
( Script Manager
=> Nach dem du das confirm result hast, kannst du ein WebService aufrufen (oder PageMethod) um dann die Aktion durchzuführen.
Zitat
Die Javascript Funktion confirm('...') kenne ich, jedoch ist da das Problem das ich ja bereits in der Codebehind bin. Hoffe sowas ist möglich das ich beim klick auf nein oder abbrechen aus der Codebehind rausspringen kann.
Thumbs generieren funktioniert in WinForms Applikation.
Thumbs generieren funktioniert auch in WebForms, aber nicht für PDF ?! (hier erhalte ich nur das PDF Icon anstatt die erste Seite als Vorschau)
*** Wenn ich dieses Property setze erhalte ich in der WebForms Applikation folgende Exception:
ohne diese Zeile erhalte ich bei Webforms das PDF Icon und bei Winforms die erste Seite als Preview.
( Class not registered (Ausnahme von HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)) )
(Soll wohl soviel heissen wie; keine Vorschau vorhanden)
---
=> Ich benutze den selben Rechner für Winform und Webform Test
=> Ich benutze das selbe File für Winform und Webform Test
---
Die Antwort von lechiffre kann ich so nicht ganz stehen lassen:
Zitat
Es wird auch immer mehr auf die HttpServices gesetzt von Microsoft und weniger auf WCF , man kann gar nicht genau sagen was mit WCF passiert in Moment.
WCF setzt man ein wenn ein Service für mehr Protokolle als nur für HTTP zur Verfügung stehen soll. Du kannst mit WCF auch REST Services bauen, ist ggf. etwas mehr Overhead dabei (meistens absolut egal). WebAPI ist einfach viel näher am HTTP Protokoll (unterstützt ja auch sonst nix) :-)
Ich weiß bei PHP kann ich die daraus entstandene .php Datei auf mein Server packen und ich könnte darauf zugreifen. Doch leider weiß ich nicht wie ich das bei .Net schaffe :(
Um eine "WebApplikation" oder ein "WebService" hosten zu können, braucht man ein WebServer. Bei PHP ist das bzw. der Apache. Bei .NET benutzt man dafür hauptsächlich den IIS. Die Konfiguration des IIS nun aber zu erklären würde den Rahmen hier sprengen. In Kürze sieht das etwa so aus:
Ich gehe davon aus (laut Beschreibung) das du WebForms nutzt.
Zitat
Wenn ich nun den Button im UserControl zweimal nacheinander betätige, vergisst der Browser alle Sessions, welche ich verwendet habe, und somit auch auf welchem UserControl ich mich befunden habe. Das bedeutet nun für mich, dass ich nur einmal speichern kann was usability mässig völliger Quatsch ist.
Nach einem Postback müssen die Usercontrols in der selben Reihenfolge wieder erstellt werden, du meinst wohl eher auch Viewstate anstatt Session.
Ich versteh das Problem immer noch nicht ganz richtig, aber wenn du wissen willst in welchem Control das etwas verändert wurde, kannst ja jedem eine einzigartige ID geben, beim neu erstellen die Selbe wieder verwenden, dann weisst du wo etwas geändert wurde ?!
Zitat
Um nun die editierten Information speichern zu können verwende ich einen Button mit ClickEvent (AutoPostBack=False).
Soweit funktioniert alles so wie es soll und nach dem Speichernevent wird mir das UserControl neu mit den gespeicherten Informationen geladen.
Ist das nicht ein Wiederspruch ? Wenn der Button kein Postback auslöst, handelst du es Clientseitig ? Warum wird dann etwas neu geladen?
Ich teste gerade Asp.Net Identity etwas ausführlicher, dabei ist mir folgendes aufgefallen:
var signinManager = HttpContext.Current.GetOwinContext().GetUserManager<ApplicationSignInManager>();
var result = signinManager.PasswordSignIn(user, password, remember, shouldLockout: true);
Führt zu einem Update Statement (nur per Profiler sichtbar), in dem alle Spalten von User updatet werden ?!?!
Verantwortlich dafür ist wohl folgendes das bei PasswordSignIn irgendwann aufgerufen wird:
public virtual void Update(TEntity entity)
{
if (entity != null)
{
Context.Entry(entity).State = EntityState.Modified;
}
}