none
JavaScript Anweisung in der aspx.cs Seite wird nicht ausgeführt RRS feed

  • Allgemeine Diskussion

  • Hallo lebe Forums Mitglieder,

    Meine Portierung der ASP.NET 2.0 Website auf WinServer 2012RE ist leider noch nicht abgeschlossen.

    Der erste Teil, hat, Dank der sehr freundlichen Unterstützung von Stefan Falz klasse geklappt.
    Vielen Dank Stefan!

    Nun ein nächstes Problem:
    Folgender Code wird nicht mehr ausgeführt.

            string javaS = "<script>window.open('PrintReport.aspx?typ="+type+"');</script>";
            ClientScript.RegisterClientScriptBlock(this.GetType(), "newWindows", javaS);

    Auf meinem Entwicklungsrechner geht das alles. Und zuvor, auf Server 2003 auch.

    Es wird ein neuer Tab geöffnet.

    Die Einstellung "static code" steht auf enabled.

    Für anonymous autentication habe ich den application pool eingestellt.

    Das war dann schon alles, was ich im Netz dazu gefunden habe.

    Grüsse

    Helmut


    • Bearbeitet Helmut19 Dienstag, 3. Oktober 2017 22:42
    • Typ geändert Stefan FalzModerator Samstag, 31. März 2018 19:12 Thread inaktiv, keine weitere Aktivität
    Dienstag, 3. Oktober 2017 22:32

Alle Antworten

  • Hallo Helmut,

    was genau heißt "geht nicht"?

    Schau bitte in die HTML Ausgabe des Browsers, ob dort irgendwo dein Javascript Code vorkommt. Falls ja, wird dein Code schon ausgeführt.

    Das neue Fenster bzw. der neue Tab wird ja anscheinend schon geöffnet. Nur die PrintReport.aspx hat wohl noch Fehler. Ruf die Datei mal manuell auf (mit dem typ Parameter und dem passenden Wert). Was passiert dann?


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    Mittwoch, 4. Oktober 2017 07:23
    Moderator
  • Vielen Dank Stefan, für Deine Antwort.

    Ja, "geht nicht" ist wirklich eine schlechte Aussage.

    Ich bin zurzeit nur völlig kaputt, weil mein eh schon auf die Hälfte gekürzter Urlaub nun schon zum grössten Teil für diese Sache draufgeht.

    Leider hatte ich keine Email über Deine Antwort bekommen.

    Na ja. Nun hab ichs etwas genauer.

    Es hätte die aufgerufene Seite in einem neuen Tab aufgehen sollen.
    In Chrome blieb das völlig aus. Nur die rufende Seite wurde wieder an den Seitenanfang gesetzt.

    Es werden zunächst einzelne Seiten über Buttons aufgerufen, was es irgendwie verhindert hat, dass ich in Chrome auf den Quelltext zugreifen konnte.
    Aber der JS Aufruf ist wohl drin.

    Da in meinerm Visual Studio 2008 alles geht, habe ich auch nicht beacht, dass der WinServer eine eigene Engine für die Übersetzung hat.

    Allerdings hat mir dann Edge eine Fehlermeldung gebracht:

    Object reference not set to an instance of an object.

    Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

    Exception Details: System.NullReferenceException: Object reference not set to an instance of an object.

    Source Error:

    Line 31:         Response.Expires = 0;
    Line 32: 
    Line 33:         string typeReport = Session["typeReport"].ToString();
    Line 34: 
    Line 35:         string queryReport= "";

    Source File: c:\inetpub\wwwroot\fm.gis-vs.de\PrintReport.aspx.cs    Line: 33

    Stack Trace:
    [NullReferenceException: Object reference not set to an instance of an object.]
       PrintReport.Page_Load(Object sender, EventArgs e) in c:\inetpub\wwwroot\fm.gis-vs.de\PrintReport.aspx.cs:33
       System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) +24
       System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +41
       System.Web.UI.Control.OnLoad(EventArgs e) +131
       System.Web.UI.Control.LoadRecursive() +65
       System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +2427
    

    Im Quelltext ist das die PageLoad() Funktion:

        protected void Page_Load(object sender, EventArgs e)
        {
            //Remove Cache
            Response.Cache.SetCacheability(HttpCacheability.NoCache);
            Response.CacheControl = "no-cache";
            Response.ExpiresAbsolute = DateTime.Now;
            Response.Buffer = true;
            Response.Expires = 0;
    
            string typeReport = Session["typeReport"].ToString();
    
            string queryReport= "";
            string queryReportHeader = "";
    
            DataSet dsHeader = new DataSet();
            DataSet ds = null;
            string fileReport = "";
    
    .....
    
    

    Der Compiler-Aussage nach müsste hier ein Objekt nicht instanziiert worden sein.

    Aber welches?
    Bisher hat es auch so funktioniert!
    Es könnte fast nur das Session-Objekt sein... ?

    Für dieses habe ich jedenfalls nirgends im Code ein "new()" oder Ähnliches gesehen.

    Grüsse

    Helmut

    Mittwoch, 4. Oktober 2017 23:29
  • Hallo Helmut,

    es kann sein, dass der SessionState gar nicht aktiviert ist. Dann steht auch kein Session Objekt zur Verfügung. Falls doch, ist die Session Variable "typeReport" nicht gesetzt worden, in dem Fall käme dann bei Session["typeReport"] null heraus, was dann wiederum den Fehler beim Aufruf von ".ToString()" erklären würde.

    Schau mal bitte in die web.config deiner Anwendung, ob dort der sessionState Node vorkommt.

    Der sollte in deinem Fall etwa so aussehen:

    <sessionState mode="InProc" ... />

    Falls da schon was ähnliches bei dir vorhanden ist, poste das bitte mal.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    Donnerstag, 5. Oktober 2017 05:27
    Moderator
  • Hallo Stefan,

    es steht folgendes drin: also ohne  mode="inProc"

            <sessionState timeout="5000" />

    Ansonsten wird obiges Session Objekt noch an einigen weiteren Stellen mit anderen String Werten verwendet.
    Also wird sie doch eigentlich gesetzt?

    Und was ich über das Setzen von Session Variablen gelesen habe, geht das doc auf diese Art?

    Session["blabla"] = "Name";

    Wenn ich aber diesen mode="inProc" reinnehme, versucht Edge die Seite über lange Zeit zu öffnen.
    schaffts aber nicht.

    Gruss

    Helmut


    • Bearbeitet Helmut19 Donnerstag, 5. Oktober 2017 12:21
    Donnerstag, 5. Oktober 2017 12:12
  • Hallo Helmut,

    Groß- und Kleinschreibung ist wichtig. Es wäre also "InProc", nicht "inProc".

    Wenn aber Sessionvariablen an anderen Stellen schon verwendet werden uns es dort klappt, wird es wohl eher so sein, dass die von dir angegebene Sessionvariable "typeReport" eben null ist, also wahrscheinlich nie oder explizit auf null gesetzt wird.

    Warum das so ist, kann man nur durch Debuggen des Codes feststellen. Da wir den hier aber nicht haben, kann ich dir da leider auch nur wenig bis gar nichts sagen.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    Donnerstag, 5. Oktober 2017 12:44
    Moderator
  • Hallo Stefan,

    ich habe wieder mal einen anderen Fehler gemacht.
    Vor dem Ändern der web.config habe ich eine Kopie angelegt, auch mit Endung .config.
    Das hat wohl den Server verwirrt.
    Korrekt geschrieben hatte ich es.

    Jetzt habe ich eine Fehlermeldung bezüglich eines Report Files ".rpt"
    Das ist ja dann wieder ein anderer Fehler, um den ich mich wohl selbst kümmern muss.

    Also war die fehlende "InProc" Anweisung erstmal der Grund.

    Auf dem alten System hatte alles funktioniert.
    Das finde ich schon verwirrend

    Vielen Dank, Stefen.

    Grüsse

    Helmut

    Donnerstag, 5. Oktober 2017 13:22
  • Hallo Helmut,

    zwischen IIS 6 und IIS 8.5 gibt es gravierende Unterschiede, auch was ASP.NET Standardeinstellungen betrifft.

    Mach für die RPT Fehlermeldung am besten einen neuen Thread auf.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    Donnerstag, 5. Oktober 2017 13:26
    Moderator
  • Hallo nochmal an alle,

    leider war das mit der gedachten Lösung doch nichts.
    Also kein neuer Thread.

    Es kam wohl daher, dass ich den betreffenden Button nach der Ergänzung im Quellcode einfach nochmal gedrückt hatte.
    Vielleicht ist es ja ein Timing-Problem, da bei nochmaligem Button-Klick was Anderes kommt?

    Ich habe das Projekt bei mir auf Visual Studio 15 portiert (ohne Änderungen am Quellcode).
    In der Hoffnung, dass damit ein anderer Webserver verwendet wird.
    Aber die Website funktioniert bei mir unter dem Debugger, ohne Anpassungen.

    Auch bei der Konvertierung wurde keine Config-Datei verändert

    Ich habe auch im Debugger nachgesehen, ob die Session-Var angelegt wird.
    Die entsprechende Stelle wird durchlaufen.

    Ich habe es auch mit Ergänzung einer "Page_Init()" Methode probiert.
    Hat nichts geholfen.

    Grüse
    Helmut


    • Bearbeitet Helmut19 Freitag, 6. Oktober 2017 11:59
    Freitag, 6. Oktober 2017 11:56
  • Hallo Helmut,

    sinnvollerweise sollte man auch in der Entwicklugsumgebung mit dem richtigen IIS arbeiten und nicht mit IISExpress oder ähnlichem. Denn nur dann hast Du annähernd die gleiche Umgebung wie beim richtigen Webserver.

    Ist das bei dir der Fall?


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    Freitag, 6. Oktober 2017 12:26
    Moderator
  • Hallo Stefan,

    nein, Ich habe nur die Entwicklungsumgebung.

    Ich hatte gehofft, dass ich mir den Speicherplatz sparen könnte.

    Aber ich verliere dann auch die Möglichkeit zu debuggen.
    Zumindest holt der dann nur den Fehler in den Debugger.
    Und damit dasselbe wie ich jetzt schon habe?

    Aber ich werde dann mal den Schritt gehen.

    Gruss
    Helmut


    • Bearbeitet Helmut19 Freitag, 6. Oktober 2017 12:59
    Freitag, 6. Oktober 2017 12:40
  • Hallo Helmut,

    nö, da hast Du mich falsch verstanden.

    Du kannst dir in fast jeder halbwegs modernen Windows Version einen IIS auch lokal installieren. Und den kannst Du zum entwickeln und debuggen verwenden.

    Je nach OS ist die Vorgehensweise ein wenig anders. Hier findest Du eine recht gute Erklärung.

      https://www.howtogeek.com/112455/how-to-install-iis-8-on-windows-8/

    Im IIS erstellst Du dann einfach eine neue Website, die auf den Projektordner des Webprojekts zeigt. Den URL gibst Du dann über die Projekteigenschaften in Visual Studio an.

    Wichtig ist dabei nur, dass das Debugging mit dem richtigen IIS nur klappt, wenn Du Visual Studio als Administrator gestartet hast (rechte Maustaste -> Ausführen als Administrator).

     


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community


    Freitag, 6. Oktober 2017 13:07
    Moderator
  • Wieder hallo zusammen,

    ich brauchte eine kleine Pause.

    Inzwischen habe ich auf meinem Entwicklungsrechner den Webserver installiert und kann den Fehler nun auch im Debugger bei mir nachvollziehen.

    Aber leider bekomme ich nicht mehr Informationen darüber. 

    Kann es der Geltungsbereich der Sesson-Vars sein?
    Wenn ich den vorgegebenen Wert für die Session Var, der an der Fehlerstelle ausgelesen wird, im Quellcode direkt setze, kommt ein weiterer Fehler,der auch auf sowas hindeutet. 

    Weiterhin hat sich herausgestellt, dass ich, wenn ich kurz vor dem Fehler im Debugger in den Einzelschritt wechsle, kein Absturz mehr erfolgt.
    Es kommt allerdings dann im Report ein Datenfehler "Feld nicht gefunden".
    Das ist für mich mit Sicherheit auch eine Falschmeldung, da eigentlich alles da ist.

    Also hat hier Microsoft einen Bug drin oder die Page_Load() Funktion muss anders gestaltet werden.
    Oder eben ....???

    Gruss
    Helmut


    Helmut



    • Bearbeitet Helmut19 Mittwoch, 11. Oktober 2017 22:32
    Montag, 9. Oktober 2017 20:34