Jump to content

C# Programm auf Webseite

Empfohlene Beiträge

Hallöööchen mit 3 öchen,

ich habe mich gefragt ob es möglich ist ein C# Programm direkt auf einer Webseite laufen zu lassen (ohne Download).

Dabei bin ich erst auf die Funktion zur Veröffentlichung aufmerksam gemacht worden - aber nach ein wenig Recherche klingt es nicht nach dem was ich suche.

Das nächste was ich gefunden habe ist ASP.NET, da hätte ich gerne rein geschnuppert, aber ich habe 'nur' VS 2015 Express und finde dort keine Möglichkeit bei der Projekt-Erstellung ASP.NET auszuwählen. Ich bin da also gerade etwas verloren weil ich nicht weiß wonach ich überhaupt genau suche und was ich dafür brauche.

Funktioniert das überhaupt? Habt ihr irgendein gutes Schritt für Schritt Tutorial?

Grüße

Tician

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen
vor 40 Minuten schrieb Tician:

VS 2015 Express

Das gibt's noch? Ich dachte "Express" wäre mit 2013 eingestellt worden und das heißt jetzt "Community". Mit der Community-Edition von VS2015 kannst du aber definitiv auch ASP.NET machen - möglicherweise musst du nur die Vorlagen nachinstallieren. Wenn du das Setup nochmal ausführst, müsstest du auswählen können, welche Bestandteile installiert werden - da sollte auch ASP.NET dabei sein.

edit: Huh, gerade nochmal nachgeguckt und offenbar gibt's die Express-Versionen tatsächlich noch parallel zur Community-Version.

Bei der Community-Version musst du ggf. aufpassen, ob du die im kommerziellen Bereich einsetzen darfst.

Express for Web gibt's bspw. hier: MSDN Download. Die Express-Versionen gibt's einmal für Desktop und einmal für Web und können dann auch nur die entsprechenden Projekte.

bearbeitet von arlegermi

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

2015 war die letzte Express-Version. Es gab da mehrere Express-Editionen für unterschiedliche Aufgaben (Desktop, Web, UWP, Quellcodeverwaltung). Die Express-Version wurde aber nun komplett eingestellt, weil sie aufgrund der Community-Version überflüssig wurde.

Du entwickelst aber mit ASP.NET keine Client-Anwendung, sondern eine Client-Server-Anwendung. Der Code wird also auf dem Server ausgeführt und der Client stellt das Ergebnis nur grafisch dar. Mit dem neueren ASP.NET MVC benutzt stark das MVC-Pattern (Model-View-Controller) und zwingt den Entwickler auch dazu, dies einzuhalten. Da brauchst also schon ein bisschen technisches Verständnis, wie dieses Pattern funktioniert. Du hast dort auch kein GUI-Designer wie in WinForms- oder WPF-Anwendungen. 

 

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

Das hört sich nach arbeit an, aber "Server führt aus und Client stellt dar" ist genau das gemeint was ich brauche.

Ich werden mich da durch wühlen und mir mal ein paar Tutorials anschauen :)

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

Ich... bräuchte Hilfe :unsure:

Ich wollte mich mal durch ein Tutorial hangeln, aber (wie immer bei mir) führen slebst Schritt für Schritt-Anleitungen zu Fehlern.

https://docs.microsoft.com/de-de/aspnet/core/tutorials/first-mvc-app/adding-controller

Ich habe meinen ersten Controller hinzugefügt, den Code kopiert und jetzt sieht es so aus:

namespace NetCoreTest1.Controllers
{
    public class HelloWorldController1 : Controller
    {
        // 
        // GET: /HelloWorld/

        public string Index()
        {
            return "This is my default action...";
        }

        // 
        // GET: /HelloWorld/Welcome/ 

        public string Welcome()
        {
            return "This is the Welcome action method...";
        }
    }
}

Sonst keine Veränderungen gemacht. Laut Anleitung sollte ich also ohne Debugging starten, dann kommt die Standard-Webseite, aber wenn ich "/HelloWorld" anhänge kriege ich nur eine leere Seite. Ich verstehe es vorne und hinten nicht... woher soll mein Programm auch wissen das ich genau diesen Index mit "HelloWorld" aufrufen möchte, ich habe 'HelloWorld' ja nie irgendwo definiert.

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

Hi,

nimm an deinen HelloWordController1 mal die 1 weg.

Dann sollte das Get mit /HelloWorld/ und /HelloWorld/Welcome auch klappen.

Ich nutze zum einfachen Testen der Endpunkte immer gerne den Fiddler. Damit lassen sich schnell Request zusammenbauen, wiederholen, etc.

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen
vor 2 Stunden schrieb Tician:

woher soll mein Programm auch wissen das ich genau diesen Index mit "HelloWorld" aufrufen möchte

ASP.NET ist start konventionsorientiert. Das heißt, dass standardmäßig jeder Controller über seinen Namen erreichbar ist (ohne das "Controller"). In deinem Fall klappt das nicht, weil dein Controller nicht mit "Controller" endet, sondern mit "Controller1" - und das widerspricht der Konvention. Man kann das ganze auch selber steuern, aber das ist für den Anfang vielleicht zuviel.

Sprich: Klasse heißt "HelloWorldController", daraus folgt die URL localhost/HelloWorld

Und wenn du eine Methode Index() hast, dann wird diese als Standardantwort für deinen Controller genutzt. Das ganze macht einen schnellen Start sehr einfach, bietet aber auch (über die Routing-Konfiguration) genug Flexibilität für komplexere Szenarien.

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

@arlegermi Vielen Dank für deine Antwort, habe ich soweit verstanden :)

 

Viel blabla, bevor sich das jemand antut: Es funktioniert gerade.

Auf Anraten starte ich jetzt doch erstmal mit "normalem" ASP.NET  über Webforms durch und finde das um einiges leichter. Jetzt habe ich eine Situation bei der ich vermutlich einfach falsch google aber gerade nicht weiß wonach ich suchen soll um ein für mich relevantes Ergebnis zu bekommen.

Ich habe auf meiner Webseite eine Tabelle (dataGridView), die durch DataBind() quasi eine MySQL-Tabelle ausgibt. Dieser Tabelle habe ich eine Spalte hinzugefügt mit klickbaren labels (linkslabels oder wie die heißen). Soweit werden sie auch angezeigt, aber geben noch einen Error zurück "dataGridView1 löste das Ereignis RowEditing aus, das nicht behandelt wurde". Es gibt also schon ein Ereignis das ich mir beim erstellen der Spalte zusammen geklickt habe - vermutlich aber das falsche, da Row Editing nicht das war was ich wollte.

Mein Gedanke war nun, dass wenn man auf einen dieser links klickt der Inhalt der Spalte "name" in der Zeile in der der Link geklickt wurde ausgelesen wird, man auf eine weitere Seite geleitet wird und ich diese Variable - also den Namen - auf der nächstes Seite weiter benutzen kann.

Ich bräuchte in etwa ein Event das linkLabel.Click() heißt oder so, das dann für alle dieser labels gilt und es mir ermöglicht zu wissen in welcher Zeile es geklickt wurde. Hier wäre ich für jegliche Hilfe dankbar.

*.aspx
  
  <form id="form1" runat="server">
        <div>
            <asp:GridView ID="dataGridView1" runat="server">
                <Columns>
                    <asp:ButtonField CommandName="Edit" HeaderText="Editieren" ShowHeader="True" Text="Edit" />
                </Columns>
            </asp:GridView>
            <br />
            Name: <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
        </div>
        <p>
            <asp:Button ID="MaAdd" runat="server" OnClick="MaAdd_Click" Text="Add Mitarbeiter" />
        </p>
    </form>
  
  
*.aspx.cs
  
protected void Page_Load(object sender, EventArgs e)
        {
            db = new Datenbank();
            db.Connect();
            MySqlDataAdapter da = db.Query("select * from mitarbeiter;");
            DataTable dt = new DataTable();
            da.Fill(dt);

            dataGridView1.DataSource = dt;
            dataGridView1.DataBind();

            db.Disconnect();
        }

db ist das Objekt einer Klasse die ich mir erstellt habe um den ganzen Datenbank-Kram abzuarbeiten.

 

Tante Edith: Jetzt habe ich mal ein Event geschrieben:

void DataGridView1_RowCommand(Object sender, GridViewCommandEventArgs e)
        {
            if (e.CommandName == "Select")
            {
                int index = Convert.ToInt32(e.CommandArgument);
                GridViewRow selectedRow = dataGridView1.Rows[index];
                TableCell tableName = selectedRow.Cells[2];
                string name = tableName.Text;

                //Response.BufferOutput = true;
                Response.Redirect("~/Default.aspx", true);
            }
        }

Allerdings kam ich da nie hin, nach langem Suchen hab ich dann die Hand vor die Stirn geklatscht und das Event auch als RowCommand in die aspx-Datei gehängt:

<asp:GridView ID="dataGridView1" runat="server" OnRowCommand="DataGridView1_RowCommand">
                <Columns>
                    <asp:ButtonField CommandName="Select" HeaderText="Editieren" ShowHeader="True" Text="Edit" ItemStyle-HorizontalAlign="Right"/>
                </Columns>
            </asp:GridView>

Hat leider nicht so funktioniert wie ich es mir erhofft hatte, meine Seite wird durch diesen kleinen Zusatz "OnRowCommand" gar nicht mehr angezeigt und liefert nur noch einen Fehler zurück:

'mitarbeiter_aspx' does not contain a definition for 'DataGridView1_RowCommand' and no extension method 'DataGridView1_RowCommand' accepting a first argument of type 'mitarbeiter_aspx' could be found (are you missing a using directive or an assembly reference?)

Ich kenne die Fehlermeldung sonst nur wenn mit tatsächlich ein using directive fehlt, in diesem Fall... keine Ahnung in der cs-Datei ist sie ja da (System.Web.UI.WebControls)

 

Edit 2: Funktioniert

bearbeitet von Tician

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

Erstelle ein Benutzerkonto oder melde dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde dich hier an.

Jetzt anmelden


×