none
Daten zwischen ASPX und C#-Datei austauschen RRS feed

  • Frage

  • Vermutlich etwas einfaches, was mir aber trotz Goole-Suche nicht so recht in den Sinn kommen will:

    Ich habe ein kleines Newsletter-Projekt und möchte das Script, was ja sonst in der Default.aspx wäre in eine Default.aspx.cs-Datei auslagern.

    Folgende Dateien:

    Master:

    <%@ Master Language="C#" AutoEventWireup="true" CodeBehind="Site1.master.cs" Inherits="WebApplication2.Site1" %>
    
    <!DOCTYPE html>
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
        <title></title>
    
    </head>
    <body>
        <div align="center">
            <h1>Newsletter</h1>
        </div>
        <!-- <form id="form1" runat="server"> -->
        <div>
        <asp:ContentPlaceHolder ID="CPH1" runat="server">
        </asp:ContentPlaceHolder>
        </div>
        <!-- </form> -->
    </body>
    </html>

    Default.aspx

    <%@ Page MasterPageFile="Site1.Master" CodeFile="Default.aspx.cs" Language="C#"%>
    
    <asp:Content ID="Content1" ContentPlaceHolderID="CPH1" runat="Server">
        Geben Sie Ihre Daten ein:<br />
        <asp:TextBox ID="txt1" placeholder="Name" runat="server" />
        <br />
        <asp:TextBox ID="email" placeholder="E-Mail" runat="server" />
        <asp:Button ID="enter" OnClick="submit" Text="Eintragen" runat="server" />
        <p><asp:Label ID="output" runat="server" /></p>
    </asp:Content>

    und mein Versuch eine Übergabe zu realisieren

    void submit(object sender, EventArgs e) 
    {
        if (((txt1.Text == String.Empty) || (email.Text == String.Empty))) 
        {
            output.Text = "Bitte tragen Sie ihre Daten ein";
        }
        else 
        {
            output.Text = ("Die folgenden Daten wurden eingetragen:  Name: " + (txt1.Text + (" E-Mail: " + email.Text)));
        }
    }

    Das Problem ist hier, dass C# für die void eine Klasse haben will - allerdings will ich da ja nur txt1, email übertragen und dann halt das output als Label-String zurückgeben? Wie realisiere ich das? Über die Google Websuche findet sich leider nur etwas, was nicht auf ASP.net abzielt, sondern eher auf reines C#.

    Dienstag, 1. April 2014 11:14

Antworten

  • Okay - Copy+Paste geht schnell also eben alles mal neu erstellt.

    Folgendes Problem bestand: Ich hatte einige Dateien, wie z.B. die aspx.cs außerhalb von Visual Studio angelegt und per "Hinzufügen" an das Projekt gebunden, was verhindert hat, dass die Designer.cs mit passenden Strings erstellt werden konnte...

    Also neues Projekt, alten Sourcecode in das neue Projekt pasten und diesmal aber in Visual Studio alle neuen Dateien anlegen.

    Jetzt "funktioniert" C# in dem Webprojekt (meinem allerersten) auch so wie ich es vorher von meinen ganzen Windows-Forms-Anwendungen gewöhnt bin.

    Also Dank an Herrn Fleischer, der mich auf den richtigen Gedankenweg gebracht hat... Meine letzten Gedankenkonstrukte (soweit sie denn verständlich sind) kann man ja dem letzten Post entnehmen - Ich markiere aber das hier als Lösung...

    • Als Antwort markiert paradonym Dienstag, 1. April 2014 13:07
    Dienstag, 1. April 2014 13:06

Alle Antworten

  • Hi,
    am einfachsten ist, wenn Du Dir mal ein ASP.NET WebForm im Visual Studio erstellst (in einem Web Projekt). Dann siehst Du auch die Beziehungen besser:

    1. Datei: Markup (html mit ASP Steuerelementen und Verweis auf CodeBehind)

    2. Datei: CodeBehind = Dein Code

    3. Datei: Designer Code

    Alle 3 Dateien haben standardmäßig den gleichen Namen, jeweils mit anderer Dateiendung (muss aber nicht sein).

    Im Markup (1. Datei) ist ein Verweis auf die Klasse (im CodeBehind), von der "geerbt" wird. Die 2. und 3. Datei enthalten partielle Klassen, d.h. enthalten die gleiche Klasse, die der Compiler dann zusammenführt.

    --
    Peter 

    Dienstag, 1. April 2014 11:52
  • Genau das ist ja quasi schon gegeben:

    Nur habe ich da noch keine Default.aspx.designer.cs erstellt... Mein einziges Problem hier ist ja nur, die Textfeld-Variablen aus der Default.aspx in die darunter liegende aspx.cs zu bekommen... Dann lässt sich das ja sicher ausführen...

    Dienstag, 1. April 2014 12:04
  • Hi,
    öffne die Default.aspx mit Dippelklick und es öffnet sich das Designer Fenster. Mit Drag&Drop kannst Du aus dem Werkzeugkasten (Toolbox) Steuerelemente auf das WEb Formular ziehen (oder auch in den Markup Code). Sobald Du dem Steuerelement einen Namen (ID) vergibst, wird auch eine Designer Datei angelegt und dort eine Variablendeklaration für das Steuerelement abgelegt. Diese Variable kannst Du dann im CodeBehind nutzen.

    --
    Peter

    Dienstag, 1. April 2014 12:19
  • Das ist doch die Default.cs - die ist ja mit <%@ Page MasterPageFile="Site1.Master" CodeFile="Default.aspx.cs" Language="C#"%> an die aspx.cs gebunden - das habe ich aber mit CodeFile gemacht... Laut Internet müsste aber so ziemlich alles gleich sein.

    Es wird auch über den Werkzeugkasten keine Designer.cs erstellt wenn ich einen weiteren Button oder so hinzufüge...
    Ich habe auch schon mal versucht die Datei selbst zu erstellen und einzubinden, aber bei dem Wechsel der Klassen innerhalb der Desiner.cs meldet mir VS 2012 Konflikte...

    Kann ich irgendwie mit den Daten, die sowieso in der Default.aspx stehen nachträglich noch eine Designer.cs erstellen? Damit ich nicht gleich ein ganz neues Projekt erstellen muss.

    Wenn das das einzige ist, was die Default.aspx.cs davon abhält auf die Textfelder der aspx zuzugreifen...

    Ohne C# läuft momentan alles, - mit C# angebunden spuckt mir das Studio für die default.aspx noch einen Fehler aus:
    "Warnung 8 C:\Users\praktikant\documents\visual studio 2012\Projects\WebApplication2\WebApplication2\Default.aspx: ASP.NET-Laufzeitfehler: Das CodeFile-Attribut kann nur mit einem Inherits-Attribut verwendet werden. C:\Users\praktikant\documents\visual studio 2012\Projects\WebApplication2\WebApplication2\Default.aspx 9 1 WebApplication2

    "

    Keine Ahnun ob das etwas damit zu tun hat, dass meine designer.cs nicht da ist

    • Bearbeitet paradonym Dienstag, 1. April 2014 12:51 Ergänzungen
    Dienstag, 1. April 2014 12:44
  • Okay - Copy+Paste geht schnell also eben alles mal neu erstellt.

    Folgendes Problem bestand: Ich hatte einige Dateien, wie z.B. die aspx.cs außerhalb von Visual Studio angelegt und per "Hinzufügen" an das Projekt gebunden, was verhindert hat, dass die Designer.cs mit passenden Strings erstellt werden konnte...

    Also neues Projekt, alten Sourcecode in das neue Projekt pasten und diesmal aber in Visual Studio alle neuen Dateien anlegen.

    Jetzt "funktioniert" C# in dem Webprojekt (meinem allerersten) auch so wie ich es vorher von meinen ganzen Windows-Forms-Anwendungen gewöhnt bin.

    Also Dank an Herrn Fleischer, der mich auf den richtigen Gedankenweg gebracht hat... Meine letzten Gedankenkonstrukte (soweit sie denn verständlich sind) kann man ja dem letzten Post entnehmen - Ich markiere aber das hier als Lösung...

    • Als Antwort markiert paradonym Dienstag, 1. April 2014 13:07
    Dienstag, 1. April 2014 13:06
  • Hi,
    der schnellst Weg ist, die Default.xxx Dateien alle zu löschen und eine neue WebForm mit dem Namen Default.aspx anzulegen. Da hast Du dann auch gleich alle richtigen Einträge, z.B. auch das vermutlich bei Dir fehlende Inherits.

    --
    Peter

    Dienstag, 1. April 2014 13:08