Laden...

Forenbeiträge von cellardoor Ingesamt 40 Beiträge

24.06.2016 - 12:29 Uhr

Hey,

ich bin dabei Paypal Plus zu integrieren (per .Net SDK, alternativ per WebRequest und JSON) und stoße auf massive Probleme.

Die Aktuelle Aufgabe ist es, per Patch Request eine Rechnungsadresse an Paypal zu übermitteln, die auf den Paypal-Seiten zur Eingabe der Daten schon direkt angezeigt wird.

Da dieses Problem in anderen Foren entweder nicht besteht, oder bisher kein Bedarf diese Funktion zu integrieren, stelle ich heir erstmal die allgemeine Anfrage, ob es Entwickler gibt, die Paypal Plus schon integriert haben und mit denen man in Kontakt treten kann.

Vielen Dank im Voraus und ein schönes Wochenende.

07.09.2012 - 12:37 Uhr

Hey Sarc,

vielen Dank.

Deine Antwort führte zu folgender Lösung:


              catch (WebException ex)
             {
                 var response = (HttpWebResponse)ex.Response;
                 var stream = response.GetResponseStream();
                 ...
              }

Die Variable stream enthält die Serverantwort. Diese kann ich dann in ein JSON-Objekt überführen.

Besten Dank

cellardoor

07.09.2012 - 11:18 Uhr

Hey,

bei der Arbeit mit einer API eines Drittanbieters sende ich mit einem POST-Request Daten. Entsprechen einige der Daten nicht den syntaktischen Anforderungen, so wird ein Fehlercode und ein JSON-Objekt mit der Fehlerbegründung zurückgegeben.

Als Fehlercode wird neben anderen z.B. der 400er oder 403er verwendet. Dies führt dazu, dass bei der GetResponse-Methode sofort eine Exception erzeugt wird, und der Code im Catch-Block einer Try-catch-Schleife ausgeführt wird.

Hier der von mir verwendete Code:


            var request = WebRequest.Create(Url);
            request.Method = "POST";
            request.ContentType = "application/x-www-form-urlencoded";
            request.ContentLength = postBytes.Length;
            
            var postStream = request.GetRequestStream();
            postStream.Write(postBytes, 0, postBytes.Length);
            postStream.Close();
           
            try
            {
                var webResponse = (HttpWebResponse)request.GetResponse();
                if (webResponse.StatusCode == HttpStatusCode.OK)
                {
                    var response = webResponse.GetResponseStream();
                    if (response != null)
                    {
                       ....
                     }
                }
            }
            catch (SystemException sysex)
            {
                   .....
            }

Also, bei der GetResponse()-Methode wird die Exception erzeugt und der Code im catch-Block ausgeführt.

Die Frage ist, wie kann ich im catch-Block auf das JSON-Objekt zugreifen, dass der Drittanbieter neben dem Fehlercode mitsendet?

Wenn ich den Request im alten ASP-Code implementiere, kann ich auf das JSON-Objekt zugreifen.

Vielen Dank im Voraus

Beste Grüße

cellardoor

27.08.2010 - 16:21 Uhr

Hallo Timur,

in der DLL-Datei frage ich Werte aus einer DB ab, und füge dann weitere Controls hinzu.

So baue ich Eingabemasken dynamisch auf (je nach Zugriffsrechten).

Ich könnte dies alles auch direkt in der CodeBehind-Datei schreiben. Dafür ist das aber mittlerweile zu viel Code geworden, so dass ich Ihn eher in eine DLL-Datei auslagere.

Grüße

Cellardoor.

27.08.2010 - 16:12 Uhr

Hallo,

was ist der beste Weg, um aus einer DLL-Datei auf die Controls in einer ASP.Net-Seite zuzugreifen?

Am liebsten wäre mir eine Methode, in der ich nicht eine Referenz des Controls an die DLL übergeben muss.

Vielen Dank für jede Hilfe im Voraus.

Cellardoor.

05.08.2010 - 19:45 Uhr

Hallo Leute,

ich verwende in einem Webprojekt das log4net-Framework. In Verbindung mit einem SMTP-Appender funktioniert alles wie gewünscht -> die Lognachrichten werden als E-Mails versendet.

Jetzt wollte ich für das Logging eine PostgreSQL-Datenbank ansprechen. Wenn ich die Konfiguration wie in einigen I-Net-Tutorials beschrieben, umsetze, passiert nichts - es kommt weder eine Fehlermeldung, noch wird etwas in die DB geschrieben.

Ein mgl. Fehler laut I-Net ist die Standardgröße des Puffers, die bei 512 liegt. Diese habe ich in der Konfiguration schon auf 1 gesetzt. Daran kann es nicht liegen.

Ich vermute, dass der Appender gar nicht angesprochen wird, denn wenn ich z.B. einen fehlerhaften Connectionstring angebe, kommt auch kein Fehler.

Um der Sache auf den Grund zu gehen, wollte ich das interne Debugging von lg4net einschlalten.

Dazu habe ich folgenden Code in der web.config eingefügt:


<appSettings>
      <add key="log4net.Internal.Debug" value="true"/>
 </appSettings>
<system.diagnostics>
    <trace autoflush="true">
      <listeners>
        <add
          name="textWriterTraceListener"
          type="System.Diagnostics.TextWriterTraceListener"
          initializeData="F:\log4net.txt" />
      </listeners>
    </trace>
  </system.diagnostics>
<system.web>

Ich erhalte aber keine Debugausgaben.

Daher die erste Frage:

Woran kann es liegen, dass log4net keine Debugausgaben leifert, bzw. wie muss die Konfiguration aussehen, damit das interne Debugging eingeschaltet wird?

Am besten wäre natürlich, wenn jemand eine funktionierende Konfiguration für PostgreSQL hat und zur Verfügung stellen könnete.

Besten Dank im Voraus

cellardoor

31.07.2009 - 15:34 Uhr

Hallo Evil,

danke für die prompte Antwort.

Dann werde ich mal versuchen, dies so zu implementieren.

Grüße

Cellardoor.

31.07.2009 - 15:17 Uhr

Hallo,

ich habe im Moment nur eine wage Vorstellung wie ich das im Folgenden beschriebene Problem lösen könnte. Daher kann es sein, dass der Threadtitel nicht stimmig ist. Dafür bitte ich um Entschuldigung.

Das Problem tritt zwar in einem Webprojekt auf, allerdings glaube ich, dass die Lösung nicht Webspezifisch ist. Daher hoffe ich, mit diesem Forum das Richtige erwischt zu haben.

Nun zu meinem Problem:

Ich habe eine Klasse, in der ich ein Grid-Element erzeuge und zu der Seite hinzufüge. Dies funktioniert - so weit, so gut.

In der Klasse weise ich dem Grid auch verschiedene Eventhandler-Funktionen zu.

Das Ganze wird dann in eine DLL kompiliert.

Die Herausforderung ist nun, dass der Inhalt der Eventhandler-Funktionen sich in Abhängigkeit zu äußeren Parametern ändert.

Und genau hier stehe ich auf dem Schlauch: Wie kann ich diese Eventhandler-Funktionen zur Laufzeit ändern?

Vielleicht kann mir jemand einen kurzen Ansatz zur Lösung skizzieren.

Besten Dank im Voraus.

P.S.: Und falls nicht klar ist, was ich erreichen möchte, kann ich versuchen, dies noch näher zu spezifizieren.

Cellardoor

23.07.2009 - 15:49 Uhr

Hallo,

ich habe mal eine allgemeine Frage, die nicht speziell C# betrifft.

Für die Zusammenarbeit und Planung mit anderen Entwicklern werden derzeit Groove, Subversion und Project eingesetzt.

Es funktioniert, ist aber recht unkomfortabel, da es keinen automatischen Datenabgleich zwischen der eingesetzten Software gibt.

Außerdem sollen jetzt noch Helpdesk, BugTracking, Erfassung von Telefonanrufen hinzukommen.

Im Moment schaue ich mir gerade PHP Project und Trac an, bin aber von beidem nicht so richtig überzeugt.

Welche andere Software (möglichst frei) kann ich mir noch anschauen?

beste Grüße

cellardoor

26.02.2009 - 09:39 Uhr

Hallo Peter,

bischen spät: Vielen Dank, das hat mich auf die richtige Spur gebracht.

Grüße

cellardoor.

18.02.2009 - 12:14 Uhr

Hallo,

ich bekomme in meiner WebApp eine Fehlermeldung ausgegeben, mit der ich nicht einmal ansatzweise etwas anfangen kann. Daher ist die Themenbeschreibung unter Umständen auch etwas unverständlich. Sorry dafür.

Die Fehlermeldung lautet:

Steuerelement-ID tbPageNumber, auf die durch die ControlToValidate-Eigenschaft von RangeValidator2 verwiesen wird, wurde nicht gefunden.

Vielleicht kann mir jemand auf die Sprünge helfen, wodurch die Fehlermeldung ausgelöst wird, wonach ich suchen muss - also wie ich mich der Ursache nähern kann.

Ein Element mit der ID RangeValidator2 wurde von mir nicht zu der Seite hinzugefügt.

Das Szenario ist folgendes:

Ich habe mittels 3rd-Party-Komponente eine Reiternavigation in der ich per Vor- und Zurück-Buttons die Reiter ändern kann. Auf zwei Reitern habe ich eine Grid-Anzeige eingebunden. Wenn ich nun in Reiter 4 auf den Weiter-Button klicke erscheint diese Fehlermeldung.

Ich bräuchte halt einen Schubs in die richtige Richtung.

Besten Dank im Voraus.

Cellardoor.

28.08.2008 - 10:32 Uhr

Hi Herbivore

also was ich mir (als Endprodukt) vorstelle, ist sicherlich nicht in einem Tag gemacht, oder zumindest nicht von mir.

Also ich denke nur mal an folgendes:*Integration eines Bildes der Ordner/Dateistruktur *Integration von Diagrammen der UML (UseCases, Klassendiagramme) *Integration einer Datenbankdokumentation *Integration von SWF oder Silverlight-Elementen *Versionshistorie aus VisualSourveSafe *Ausgabe als PDF-Datei mit Bookmarks *Ausgabe als CHM-Datei *Da es im Moment um Web-Projekte geht: Einstellungen des IIS *Integration von ASPX-Datei-Dokumentationen (also HTML-Kommentare)

  • und die Liste liesse sich bestimmt noch weiter fortsetzen...

na mal sehen, was draus wird. Da ich dies nur nebenbei machen kann, wird das sicherlich eine Weile dauern. Aber gut Ding will Weile haben.

Wenn es was Vorzeigbares gibt, werde ich dies mal unter den Projekten hier veröffentlichen.

cellardoor

28.08.2008 - 10:18 Uhr

Hi,

ich habe mir nochmal Deine Collection-Ausgabe angesehen.

Dort findet man:

------------------System.Web.UI.WebControls.DataControlFieldCell -
--------------------> System.Web.UI.LiteralControl -
--------------------> System.Web.UI.HtmlControls.HtmlInputButton - hbtnProp
--------------------> System.Web.UI.LiteralControl -

Demnach befindet sich der HTMLInputButton nicht direkt in der Zelle, sondern im LiteralControl in der Zelle.

Versuch mal folgenden Zugrifsscode:


HtmlButton btn = e.Row.Cells[3].Controls[0].FindControl("hbtnProp") as HtmlButton;

Das hinzugefügte controls[0] müsste das LiteralControl ansprechen.

cellarDoor

28.08.2008 - 10:14 Uhr

Hi,

anscheinend is das entweder ein Thema. dass keinen interessiert (ist dem so?). Oder es gibt keine fertigen Lösungen dafür...

Dass Herbivore für die Dokumentation ein eigenes Tool verwendet, habe ich in irgendeinem Thread schon gelesen.

Dann werde ich mir wohl was eigenes basteln.

Falls jemand Interesse hat, sich daran zu beteiligen, kann er sich ja mal melden.

28.08.2008 - 09:56 Uhr

Hi,

ich denke, Dir kann das Event OnRowDataBound weiterhelfen. Innerhalb des zugehörenden Codes müsstest Du auch auf Dein Template-Element zugreifen können.

Schau Dir dazu mal folgenden Tread an: Gridview mit Checkbox - Value der Checkbox abfragen

CellarDoor

23.08.2008 - 19:34 Uhr

Hallo Herbivore,

ja genau das meine ich.

Dass man sich selbst ein Tool basteln kan,, dass die Kommentare automatisiert ausliest und in eine FOP-Datei oder CHM-Datei packt, ist natürlich klar.

Aber es könnte ja sein, dass es dafür schon was gibt.

cellardoor

23.08.2008 - 18:56 Uhr

Hallo,

es geht, wie im Threadtitel genannt, um die Dokumentation von Websiteprojekten.

Es gibt hier im Forum zwar jede Menge Threads zu dem Thema Dokumentation, diese beschäftigen sich aber in den meisten Fällen mit der Dokumentation von Klassenbibliotheken.

Hierfür setzten wir Sandcastle ein und sind damit auch erstmal zufrieden.

Eine ähnliche Dokumentaion würden wir jetzt auch gerne möglichst automatisiert für die Website erstellen.

Die Frage ist nun, ob es dafür Lösungen gibt.

Diese Dokumentation sollte nicht nur die aspx/cs-Dateien umfassen, sondern auch erstellte CSS- und JS-Dateien.

Mit bestem Dank

cellardoor.

06.08.2008 - 09:16 Uhr

Hallo Squadwuschel,

das Ganze in das Page_Load-Event zu packen hat nichts gebracht.

Allerdings hatte ich mich in dem Eröffnungsbeitrag nicht ganz korrekt ausgedrückt.

Das Ganze funktioniert mit dynamisch erzeugten TextBox- und CheckBox-Controls.

Beim erstmaligen Aufruf sind die Felder leer. Werden Daten bearbeitet, werden die Daten aus der DB ausgelesen und ordnungsgemäß angezeigt. Wurden Daten geändert, und der Speichern-Button geklickt, erfolgt ein PostBack, die geänderten Daten werden in der DB gespeichert und in den TextBox-Controls angezeigt.

So wie man es erwartet.

Allerdings funktioniert dies nicht bei ListBox- und RadioButtonList-Controls.

In dem Page_Init-Event erstelle ich die Controls und befülle sie mit den Daten aus der DB per control.Items.Add().

Wenn ich nun nach einem Postback die Werte dieser Controls entweder per control.SelectedItem oder einer forech-Schleife auslesen will, erhalte ich für kein in der Item-Collection vorhandenes Element die Selected-Eigenschaft.

Ich vermute mal, dass das Wiederbefüllen der Controls dafür sorgt. Wenn ich das aber weglasse, sind die Controls leer.

Any ideas?

05.08.2008 - 08:04 Uhr

Hallo,

nachdem dies Thema hier bestimmt schon 1000mal behandelt wurde, ist es mir recht peinlich eine solche sicherlich recht einfache Frage zu stellen. Aber irgendwie stehe ich auf dem Schlauch...

Ich habe ein Webform, das ich im Page_Init-Event mit dynamischen Controls befülle.

Da das Formular sowohl zur Neueingabe, als auch zum Bearbeiten eines Datensatzes verwendet wird, gibt es im Page_Load-Event eine Anweisung:


if (!IsPostBack) GetData(connection);

Das Formular enthält zusätzlich noch einen Speicher-Button zum Abspeichern der Daten.

Das Problem ist folgendes:

Wenn ich einen bestehenden Datensatz bearbeite, werden beim ersten Aufruf die dynamisch erstellten Controls mit den aus der DB ausgelesenen Werten befüllt.

Wenn ich jetzt aber auf Speichern klicke, scheint die Funktion GetData vor dem Speichern aufgerufen zu werden, da die in der Speicherprozedur ausgelesenen Werte denen die aus der DB ausgelesen werden entsprechen.

Meine Frage ist daher, in welchem Event des Lifecycles (der eigentlich recht überischtlich ist) muss ich die Funktion GetData ansprechen?

Sorry, ich finde die Frage selbst nerivg, aber irgendwie bin ich gerade verwirrt.

30.07.2008 - 07:53 Uhr

Hallo Herbivore,

erstmal vielen Dank für Deine Hilfe. Das sieht schon ganz gut aus.

Ich werde mir dies in den nächsten Tagen mal anschauen.

Was ich mich aber frage, ist, wieso die anderen Methoden, die als funktionierende Alternativen zu der Funktion MeasureString aufgeführt werden, nicht funktionieren.

In den Foren bzw. bei Codeproject werden diese Methoden als funktionierend aufgeführt. Und dies tun sie zumindest bei mir nicht.

Daher nochmal die Frage, ob es daran liegen könnte, dass die verwendete TTF-Datei keine Systemdatei ist, sondern eine Fremddatei.

Grüße Andre.

27.07.2008 - 06:17 Uhr

Hi,

der von Dir gemachte Vorschlag sollte eigentlich mit Methode 2 umgesetzt sein.

Hier nochmal der Code:


static public int MeasureDisplayStringWidth(Graphics graphics, string text, Font font)
{
    const int width = 32;
    System.Drawing.Bitmap   bitmap = new System.Drawing.Bitmap (width, 1, graphics);
    System.Drawing.SizeF    size   = graphics.MeasureString (text, font);
    System.Drawing.Graphics anagra = System.Drawing.Graphics.FromImage(bitmap);

    int measured_width = (int) size.Width;

    if (anagra != null)
    {
        anagra.Clear (Color.White);
        anagra.DrawString (text+"|", font, Brushes.Black, width - measured_width, -font.Height / 2);

        for (int i = width-1; i >= 0; i--)
        {
            measured_width--;
            if (bitmap.GetPixel (i, 0).R != 255)    // found a non-white pixel ?
                break;
        }
    }

    return measured_width;
} 

Es wird die mit MeasureString ermittelte Größe verwendet, dann wird ans Ende der Zeichenkette ein "|" gehangen und der String so auf ein neues Bild gezeichnet, dass nur die letzten 32Pixel untersucht werden müssen.

Trotzdem erhalte ich bei dieser Methode einen zu kleinen Wert, obwohl es richtig und logisch aussieht.

Ich bin den Code schon gefühlte 1000mal durchgegangen, und kann weder einen Fehler, noch Verbesserungsmöglichkeiten finden.

26.07.2008 - 16:14 Uhr

Hallo herbivore,

wenn ich die Weite des ausgegebenen Bildes manuell auf 840 setze, schliesst das Bild rechts genau mit dem Ende des letzten Buchstabens der Zeichenkette ab.

Und in meinem Verständnis würde ich diesen Rückgabewert auch von der Funktion MesureString erwarten.

26.07.2008 - 15:06 Uhr

Hallo Community,

es geht, wie schon in einigen der Beiträge hier des öfteren behandelt, um die Ermittlung der Zeichenbreite einer Zeichenkette.

Wenn ich für eine Zeichenkette die Methode MeasureString anwende, wird mir eine Breite von 848 Pixeln zurückgegeben. Diese ist zu weit.

Wenn ich, wie hier in einigen Beiträgen gelesen, ein StringFormat anpasse und übergebe, erhalte ich eine Breite von 815 Pixeln. Dies ist aber wieder zu kurz.

Der verwendete Code hierfür ist:


   StringFormat sf = new StringFormat(StringFormat.GenericTypographic);
   sf.FormatFlags = StringFormatFlags.MeasureTrailingSpaces;		
   SizeF sz = gCheck.MeasureString(text, font, -1, sf);

Bei Codeproject werden zwei Alternativen für die Methode MeasureString genannt.

Der Artikel ist unter Bypass Graphics.MeasureString limitations verfügbar.

Hier der Excerpt der beiden besprochenen Funktionen:


static public int MeasureDisplayStringWidth(Graphics graphics, string text, Font font)
{
    const int width = 32;
    System.Drawing.Bitmap   bitmap = new System.Drawing.Bitmap (width, 1, graphics);
    System.Drawing.SizeF    size   = graphics.MeasureString (text, font);
    System.Drawing.Graphics anagra = System.Drawing.Graphics.FromImage(bitmap);

    int measured_width = (int) size.Width;

    if (anagra != null)
    {
        anagra.Clear (Color.White);
        anagra.DrawString (text+"|", font, Brushes.Black, width - measured_width, -font.Height / 2);

        for (int i = width-1; i >= 0; i--)
        {
            measured_width--;
            if (bitmap.GetPixel (i, 0).R != 255)    // found a non-white pixel ?
                break;
        }
    }

    return measured_width;
}

und


static public int MeasureDisplayStringWidth(Graphics graphics, string text, Font font)
{
    System.Drawing.StringFormat format  = new System.Drawing.StringFormat ();
    System.Drawing.RectangleF   rect    = new System.Drawing.RectangleF(0, 0, 1000, 1000);
    System.Drawing.CharacterRange[] ranges  =  { new System.Drawing.CharacterRange(0, text.Length) };
    System.Drawing.Region[] regions = new System.Drawing.Region[1];

    format.SetMeasurableCharacterRanges (ranges);

    regions = graphics.MeasureCharacterRanges (text, font, rect, format);
    rect    = regions[0].GetBounds (graphics);

    return (int)(rect.Right + 1.0f);
}

Diese beiden Methoden geben mir eine Weite von 821 Pixeln zurück.

Ich bekomme, also 3 verschiedene Werte, die alle falsch sind:

  • Methode 1: 848px -> zu gross
  • Methode 2: 815px -> zu klein
  • Methoden 3 und 4: 821px -> zu klein

Noch ein Hinweis: Der verwendete Font ist eine externe TTF-Datei. Könnte dies die Ursache dafür sein, dass auch die Methoden 2,3 und 4, die in Foren als genau genannt werden, nicht funktionieren?

Any help would be fine.

André

16.03.2008 - 14:12 Uhr

Liebe Community,

Ich möchte ein Server-Control entwicklen, dass ich wie folgt in der ASPX-Seite definieren kann:


<cc1:WebServerControl runat="server">
    <Foos>
        <cc1:Foo Title="Title1"/>
        <cc1:Foo Title="Title2"/>
    </Foos>
</cc1:WebServerControl>

Dazu habe ich folgenden C#-Code für das Steuerelement geschrieben:


public class Foo
{
    private string title = "";
		
    public string Title
    {
        get { return title; }
        set { title = value; }
    }
}

[ToolboxData("<{0}:ServerControl1 runat=server></{0}:ServerControl1>")]
public class Servercontrol1 : WebControl
{
    public List<Foo> Foos = new List<Foo>();
}

Wenn ich per Code in der Code-Behind-Datei ein Element Foo erzeuge und zur Liste Foos des Serversteuerelements hinzufügen möchte, funktioniert das einwandfrei.

Wenn ich die Collection der Elemente Foo aber in der ASPX-Datei, wie am Anfang des Beitrags geschrieben, angeben möchte, erhate ich folgende Fehlermeldung:

Type '...' does not have a public property named 'Foos'.

Kann mir jemand weiterhelfen?

Vielen Dank schon mal im Voraus.

15.03.2008 - 21:00 Uhr

Hallo Peter,

danke für die schnelle Antwort.

Ich werde das dann gleich so umbauen, dass die angepassten Css-Dateien in einem spezifizierten Ordner unterhalb der Webanwendung liegen. Dann kann dies später auch einfacher für Skins umgesetzt werden.

Cellardoor.

15.03.2008 - 20:00 Uhr

Liebe Community,

ich entwickle gerade ein eigenes Control (angepasstes Login-Control).

Die Breite des Controls setze ich per CSS-Datei, die in die Assembly mit reinkompiliert wird. Soweit so gut.

Jetzt würde ich gerne dem Control die Eigenschaft Width zur Verfügung stellen, deren Wert an die CSS-Datei übergeben wird.

Meine Vermutung ist aber, dass dies nicht funktioniert. Vermutlich werde ich betreffenden Style-Eigneschaften aus der CSS-Datei entfernen und direkt in die Ausgabe schreiben müssen, oder?

Vielen Dank für einen Hinweis, der mich in die richtige Richtung schubst...

03.09.2007 - 19:05 Uhr

Dank an alle,

funktioniert einwandfrei. Die Zählvariable wird in einem Hidden-Field zwischengespeichert. Und ich habe Sysiphus sofort verstanden 🙂.

Cellardoor.

03.09.2007 - 17:39 Uhr

Hallo Sisyphus,

danke erstmal. So funktioniert es. Und mittels Request.Form kann ich in der For-Schleife auch den alten Wert wieder setzen.

Hätte aber gerne die Mechanismen wie ViewState für meine dynamischen Controls verwendet.

Wenn jemand hierfür noch eine Idee hat... Immer her damit.

Cellardoor

03.09.2007 - 16:48 Uhr

Hallo Sisyphus,

danke für Deine schnelle Antwort. Leider führt sie bei mir nicht zum Erfolg.

Wenn ich das PlaceHolder-Element statisch in der ASPX-Seite definiere und dann in der Csharp-datei via PlacHolderId.Controls.Add(); darauf zugreifen möchte, er halte ich ein "PlacHolderId ist in diesem Kontext nicht definiert".

Und wenn ich das PlaceHolder-Element dynamisch nach dem Klick des Buttons erzeuge und zu den Controls der Seite hinzufüge, habe ich genau das gleiche Problem wie im Eingangspost: nach einem Postback sind die Controls nicht mehr enthalten.

Nochmal zur Erinnerung: Es geht nicht darum, dass ich im Page_Load-Event ein Control hinzufügen möchte, sondern in einem Click-Event eines Buttons.

Ich glaube auch, dass ich das Problem richtig erkannt habe. Es gibt ja genügend Seiten dazu im Netz. Aber irgendwie hapert es an der Umsetzung...

03.09.2007 - 15:58 Uhr

Hallo Community,

ich möchte auf einer Webpage pro Button-Click ein Eingabefeld hinzufügen.

Die Funktion, die beim Click auf den Button aufgerufen, wird sieht so aus:



TextBox tboxFieldsetBezeichnungFieldNew = new TextBox();
tboxFieldsetBezeichnungFieldNew.CssClass = "inpt-brdr1-h19-w400";
		
Panel pnlFieldsetBezeichnungFieldNew = new Panel();
pnlFieldsetBezeichnungFieldNew.CssClass = "field";
pnlFieldsetBezeichnungFieldNew.Controls.Add(tboxFieldsetBezeichnungFieldNew);
pnlFieldsetInput.Controls.Add(pnlFieldsetBezeichnungFieldNew);

Dies klappt soweit auch gut. Mein Problem ist, dass ich nur einmal das Feld hinzufügen kann. Es sollen aber beliebig viele Eingabefelder hinzugefügt werden können.

Meine vermutete Erklärung dafür ist:

Das Control wird dem Tree hinzugefügt, nicht aber in der Tree-Verwaltung registriert, da das Control nach dem Page-Load-Event hinzugefügt wird. Wenn der Button geklickt wird, wird ein Postback ausgeführt. Das zuerst hinzugefügte Control ist nicht im TreeState registriert, und damit nicht vorhanden. Und dann wird die Funktion ausgeführt und ein Eingabefeld hinzugefügt.

Soweit verstehe ich das alles. Aber wie kann ich das ändern?

Any help would be fine.

05.07.2007 - 17:09 Uhr

Hallo Leute,

ein kleines Problem, bei dem ich nicht mehr weiterkomme.

Eine unserer Anwendungen verwendet einen MySQLRoleProvider und läuft unter W2k auf dem Server. Keine Probleme. Alles einwandfrei.

Wenn ich es aber auf einem Notebook unter Vista laufen lassen will, wird eine Exception ausgeworfen. Die Ursache ist eine Zeile in der web.config.

Die Fehlermeldung:

Beschreibung: Fehler beim Verarbeiten einer Konfigurationsdatei, die für diese Anforderung erforderlich ist. Überprüfen Sie die unten angegebenen Fehlerinformationen, und ändern Sie die Konfigurationsdatei entsprechend.

Parserfehlermeldung: Ein Aufrufziel hat einen Ausnahmefehler verursacht.

Die fehlerverursachende Zeile in der web.config ist folgende:


<add name="MySqlRoleProvider" type="dbRoleProvider.Objects.MySqlRoleProvider" connectionStringName="ConnectionString" applicationName="backoffice" writeExceptionsToEventLog="false" />

Ich vermute mal, dass die Ursache de Fehlers fehlende Berechtigungen sind.

Allerdings habe ich im Moment keinen Schimmer, wie ich denen auf die Spur kommen soll.

Any help would be fine...

23.06.2007 - 08:03 Uhr

Hi Reman,

der Preis der Angebote sollte immer mit zwei Nachkommastellen ausgegeben werden. Dies geschieht nicht bei z.B. 10,40 Euro. Hier steht nur 10,4 Euro.

Eine kleine Unschönheit nur...

12.06.2007 - 14:16 Uhr

Hallo Siggi,

das Problem ist gelöst.

An den Einstellungen in der web.config lag es nicht. Wie ich schon geschrieben hatte, wird der Wert ja richtig ausgelesen, wenn ich am Ende der Funktion Initialize() mir den per Logging ausgeben lasse.

Das Problem war die Instanziierung des CustomRoleProviders in der ASPX-Datei. Stattdessen muss mittels:


RoleProvider myRoleProvider = Roles.Provider;

der allgemeine Provider instanziiert werden, dessen Methoden dann angesprochen werden können. Diese Aufrufe werden dann an den CustomProvider weitergeleitet. Und hier ist die Eigenschaft pApplicationName auch immer mit dem richtigen Wert aus der web.config belegt.

Vielen Dank für Deine Mühen und Deinen Aufwand 🙂.

Werde jetzt nochmal versuchen zu ergründen, warum die falsche Instanziierung zu dem Problem führte, denn lögisch erscheint es mir noch immer nicht.

11.06.2007 - 18:14 Uhr

Hallo Siggi,

danke erstmal, dass Du Dir soviel Mühe mit mir gibst...

Die Abfrage User.IsInRole ist eigentlich nur eine Nebenkriegsschauplatz in dem Thread.

Ich werde nochmal mein Problem kurz, und hoffentlich verständlich, aufschlüsseln.

Die Abfrage nach User.IsInRole brachte mir immer ein false, trotzdem in der DB der richtige Datensatz aus Username, Rolename, Applicationname vorhanden war.

Um nun zu überprüfen, ob meine Implementierung des Roleproviders fehlerhaft ist, liess ich mir die DB-Anweisung, die in der Funktion ausgeführt wird, im Log ausgeben.

Dabei fiel mir auf, dass die Eigenschaft pApplicationName trotz richtigen Wertes in der web.config leer war.

Um zu überprüfen, ob die Daten aus der web.config richtig ausgelesen werden, liess ich mir den Wert pApplicationName am Ende der Funktion Initialize() ausgeben. Hier war die Eigenschaft mit dem richtigen Wert aus der web.config belegt.

Mein Problem in Kurzform:

Am Ende der Funktion Initialize: Eigenschaft pApplicationName hat den richtigen Wert.

Bei Zugriff auf diese Eigenschaft in einer anderen Funktion des Roleproviders: Eigenschaft pApplicationName ist leer.

Und dies ist eigentlich auch schon die ganze Frage. Dieses Phänomen habe ich auch bei dem von Dir geposteten RoleProvider beobachtet. Allerdings kann ich mir nicht vorstellen, dass Du ohne ApplicationName arbeitest, auch weil Du nochmal explizit auf die Referenzierung im AppSettings-Abschnitt der web.config hinweist.

Vielleicht kannst Du mir mit einem kurzen Schlagwort nochmal auf die Sprünge helfen und den Knick in meinem Denken entwirren 😕.

Grüße

Andre

11.06.2007 - 13:20 Uhr

Hi,

@HyperteX:

Das ist ja auch noch auf meiner ToDo-Liste. Der Provider wurde soweit umgeschrieben, dass er mittels DBProviderFactory mit jeder DB über OleDB oder ODBC kommunizieren kann. Trotzdem danke.

@gosiggi:

Hi, vielen Dank erstmal. Leider besteht das Problem noch immer. Wenn ich mittels Logging mir die Eigenschaft pApplicationName am Ende der Methode Initialize ausgeben lasse, enthält sie die in der web.config zugewiesene Zeichenkette.

Wenn ich nun z.B. in der Methode IsUserInRole mir die Eigenschaft, bzw. die SQL-Anweisung ausgeben lasse, ist diese leer.

in der ASPX-Datei wird die Klasse instanziiert und dann die Methode IsUserInRole aufgerufen:


DatingRoleProvider myProv = new DatingRoleProvider();
Response.Write(myProv.IsUserInRole("Admin", "Administrator"));

Irgeneine Idee?

Mit freundlichen Grüßen

cellardoor.

11.06.2007 - 13:09 Uhr

Hallo Maximus,

in welcher Zeile wird denn gemeckert?

Falls folgende Zeile das Problem verursacht:

ibFlaggen.Attributes.Add("onclick", "window.open('dateiauswahl.aspx','Dateiauswahl');");

könnte es daran liegen, dass Deine FindControl-Anweisung eben nicht auf das Control zugriefen kann und damit null zurückgegeben wird.

08.06.2007 - 10:31 Uhr

Hallo Community,

für die Authentifizierung verwende ich einen MySQL-Roleprovider. Dessen Funktion isUserinRole() würde ich auch gerne zum selektiven Anzeigen von Eingabefeldern in einem Formular verwenden.

Mein Problem ist, dass der Applicationname nicht korrekt in der SQL-Anweisung übernommen wird. Er ist immer leer.

Folgende Eigenschaft dazu gibt es:


private string pApplicationName = "";

public override string ApplicationName
{
       get { return pApplicationName; }
       set { pApplicationName = value; }
}

In der Funktion Initialize wird die Variable pApplicationName korrekt mit dem Wert aus der web.config belegt.

In der SQL-Anweisung der Funktion IsUserInRole ist diese Variable aber leer.

Hier der Code für die SQL-Anweisung der Funktion IsUserInRole:


public override bool IsUserInRole(string username, string rolename){
            bool userIsInRole = false;
            strCmd = new StringBuilder("SELECT COUNT(*) FROM ");
            strCmd.Append (usersInRolesTable);
            strCmd.Append (" WHERE Username = '");
            strCmd.Append (username);
            strCmd.Append ("' AND Rolename = '");
            strCmd.Append (rolename);
            strCmd.Append ("' AND ApplicationName = '");
            strCmd.Append (pApplicationName);
            strCmd.Append ("'");
		.....
}

Irgendwie scheine ich auf dem Schlauch zu stehen und den Wald vor lauter Bäumen nicht zu erkennen.

Dank im Voraus für jede Hilfe

18.05.2007 - 13:26 Uhr

OK. Das erste Problem, des nicht erreichbren Mail-Servers hat sich erledigt. Man sollte ab und an doch mal die AntivirenLogs checken. 😦. Mea Culpa.

Bleibt noch das zweite Problem mit dem Abfangen des Fehlers bestehen.

18.05.2007 - 12:58 Uhr

Hallo,

beim Emailversand per C# aus einer ASP.NET - Anwendung bekomme ich folgende Fehlermeldung:

Eine bestehende Verbindung wurde softwaregesteuert
durch den Hostcomputer abgebrochen.

Eine Kommunikation mit dem Emailserver findet lt. Logeintrag überhaupt nicht statt (kein Helo/Ehlo etc.). Eine falsche PW/User-Kombination dürfte demnach nicht Fehlerursache sein.

Folgender Code wird verwendet (Anmeldedaten, Servername, Emailadresse anonymisiert):


SmtpClient smtp = new SmtpClient("mail.test.de");
smtp.Credentials = new NetworkCredential("xxx@xxx.de", "xxx");
MailMessage objMailCustomer = new MailMessage();
objMailCustomer.From = new MailAddress("xxx@xxx.de", "xxx");
objMailCustomer.To.Add(new MailAddress("xxx@xxx.de"));
objMailCustomer.Subject = "Exportdatei";
objMailCustomer.Body = "test";
smtp.Send(objMailCustomer);

Ein Ping, den ich zur Kontrolle vorher absetze, um die Erreichbarkeit des Systems zu überprüfen, ist erfolgreich - der Emailserver erreichbar.

Ich habe keine Ahnung, wo genau der Fehler steckt, da ein Emailversand eigentlich eine simple Sache ist. Steh aber irgendwie auf dem Schlauch. Ein Hinweis, in welcher Richtung ich suchen muss, wäre hilfreich.

Noch eine Frage:

Wenn ich mittels try-catch-Block den Fehler abfangen möchte, funktioniert, dies nicht. Es wird mir trotzdem die Fehlermeldung ausgegeben. Der Code hierfür ist folgender:


try 
{
smtp.Send(objMailCustomer);
}
catch (System.Net.Sockets.SocketException sysex)
{
   //tue was
}

Auch hier wäre ich für jede Anregung dankbar.

Mit besten Grüßen

cellardoor

15.05.2007 - 19:23 Uhr

Hi Leute,

ich habe zwei kleinere Probleme mit dem UTF-8 Encoding in ASP.Net-Seiten.

Den Metatag zur UTF-8Kodierung habe ich im Head hinzugefügt:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

Nun die zwei Probleme:

  1. Ich habe ein Repeater-Objekt, dass ich durch Abfrage aller Orte einer MySQL-Datenbank fülle. Die MySQL-Datenbank verwendet UTF-8 als Encoding. Im Seitenoutput werden Sonderzeichen (Umlaute) nicht ordentlich kodiert dargestellt.

Als Beispiel sei der Ort Düsseldorf genommen.

Das ItemTemplate des Repeater-Objekts enthält folgendes Element:

<asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl='<%# Eval( "Value" ) %>' Text='<%# Eval( "Key" ) %>'>

Der Quelltext der Website zeigt Düsseldorf folgendermaßen kodiert an:

Düsseldorf

Im Browser betrachtet erscheint das auch genauso, also als Düsseldorf.

Wenn ich mir nun die Ausgabe auf einer alten ASP-Seite anschaue, ist im Head auch die UTF-8-Angabe enthalten und im Quelltext steht auch:

Düsseldorf

Im Browser wird das aber mit ü dargestellt.

  1. Ein ähnliches Problem habe ich auch in einem Gridview. Als Datenobjekt dient wieder eine UTF8-MySQL-Datenbank. Wenn ich mir hier die Kodierung der Zeichenkette "Sahintürk" anschaue, so erscheint im Quelltext der ASP.Net SEite:

Sahintürk

Dargstellt wird es im Browser als:
Sahintürk

Im Quelltext einer probeweise aufgesetzten ASP-Seite steht

Sahintürk und wird im Browser mit kodiertem ü dargestellt. So wie man es erwartet.

Irgendwie stehe ich auf dem Schlauch, denn aus der Datenbank erhalte ich einen UTF8-kodierten String und müsste den ohne Kodierungsprobleme darstellen können.

Andererseits wird in meinen beiden Beispielen der Buchstabe ü anders kodiert dargestellt, so dass ich doch denke, dass in einem Fall ein Encoding (automatisch?) greift.

Jede Hilfe wäre fein.