Autor Beitrag
georgeboy
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 198



BeitragVerfasst: Fr 13.11.20 16:51 
Hallo zusammen, ich bin neu in ASP.NET MVC, kenne mich in WebForms aus, und möchte mich mit dem MVC Modell mit C# befassen. Leider finde ich keine Literatur bzw Tutorial dafür, nach langem Suchen. Folgende kleine Funktionalität: Auf dem Server liegt eine Datei mit Strings, beim Client eine Textbox, und ein Button. Beim draufclicken soll eine Meldung erscheinen, ob die Eingabe in der Datei enthalten ist oder nicht. Wie realisiere ich das mit dem MVC Modell ? Wenn sich jemand meiner erbarmen würde ...
georgeboy Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 198



BeitragVerfasst: So 15.11.20 16:38 
Wie greift man vom Controller aus, auf den Inhalt einer TextBox, auf der View zu ?
jfheins
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 918
Erhaltene Danke: 158

Win 10
VS 2013, VS2015
BeitragVerfasst: So 15.11.20 21:53 
Ich kann dazu diese Videoserie empfehlen: channel9.msdn.com/Se...on-to-ASP-NET-MVC/01

Zitat:
Wie greift man vom Controller aus, auf den Inhalt einer TextBox, auf der View zu ?

So pauschal gar nicht.

In asp.net MVC hast du HTTP dazwischen. Das heißt, ohne JS Spielereien schickst du HTML zum Browser, der zeigt eine Textbox an. Und mit dem Submit eines Formulars wird dein C#-Code wieder aufgerufen. Wenn du dazwischen eingreifen willst, musstt du JS oder JS+wasm bemühen.

In der Controller-Methode die von dem Button aufgerufen wird kannst du einfach einen Parameter so nennen wie die Textbox, die Daten kommen dann da rein.
georgeboy Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 198



BeitragVerfasst: Mo 16.11.20 15:49 
Bei VS 2019 Community ASP.NET MVC Controller, konnte ich die TextBox mit der Id nicht ansprechen ...
jfheins
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 918
Erhaltene Danke: 158

Win 10
VS 2013, VS2015
BeitragVerfasst: Mo 16.11.20 21:23 
Nix für ungut, aber wie soll man da jetzt helfen?

"Es geht nicht" ist höchstens der erste Teil der Einleitung, aber taugt leider gar nicht um dann sinnvoll zu helfen. Sinnvoll wären Infos wie:
- Was ist dein aktuelles Problem?
- wie bist du dahin gekommen?
- Was sollte deiner Meinung nach passieren?
- Was passiert stattdessen?
- Was meinst du genau mit "ansprechen"?

Aber ich kann dir versichern: Es geht. Ich habe es soeben ausprobiert:
ee-mvc
Einloggen, um Attachments anzusehen!
georgeboy Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 198



BeitragVerfasst: Di 17.11.20 09:00 
Ich habe mit VS 2019 Community ein ASP.NET Projekt mit MVC C# angelegt, auf der View eine TextBox mit einer id="MeineTextBox" angelegt, und wollte im Controller in die TextBox schreiben: MeineTextBox.Text = "MeinText"; Der Compiler kannte allerdings den Namen: "MeineTextBox" nicht. Müsste man da einen Namespace einbinden ?
jfheins
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 918
Erhaltene Danke: 158

Win 10
VS 2013, VS2015
BeitragVerfasst: Di 17.11.20 15:23 
Ok, damit kann man schon mehr anfangen :-)

Du brauchst eine Klasse, die als Model fungiert (das M in MVC).
Könnte z.B. so aussehen:
ausblenden C#-Quelltext
1:
2:
3:
4:
public class MyModel {
    public string Text { get; set; }
    public MyModel(string val) => Text = val;
}


Dann schreibst du im Controller:
ausblenden C#-Quelltext
1:
return View(new MyModel("MeinText"));					


Und in der View kannst du in der ersten Zeile ein @model MyModel einfügen und im HTML den Wert mit @Model.Text anzeigen.

Wenn du mit asp.net core unterwegs bist, wäre das hier auch ein guter Einstieg: docs.microsoft.com/d...p;tabs=visual-studio
georgeboy Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 198



BeitragVerfasst: Di 17.11.20 17:08 
Wo kommt in deinem Beispiel die TextBox bzw deren Inhalt ins Spiel, also lesender Zugriff auf die TextBox ? Als Client muss ich ja eine Eingabe machen können, die weiterverarbeitet werden kann. Kann sein dass ich das ganze noch nicht verstehe, bin hier noch Anfänger ...
jfheins
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 918
Erhaltene Danke: 158

Win 10
VS 2013, VS2015
BeitragVerfasst: Di 17.11.20 17:25 
Ja, du kannst Eingaben machen.

Sobald das Formular abgesendet wird, bekommst du den Wert. Das Formular benötigt einen Endpunkt (kann der gleiche sein) und darin kannst du einen Parameter anlegen, der genau so heißt wie die Textbox.
georgeboy Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 198



BeitragVerfasst: Di 17.11.20 17:38 
Tut mir leid, dass ich lästig bin, nun habe ich keine Ahnung was ein "Endpunkt" ist ( arbeite nicht mit Core ), könntest Du mir ganz grob eine Lösung für mein, im ersten Beitrag, aufgeführtes Beispiel geben. Also beim Server eine Datei mit Strings, beim Client eine Textbox und ein Button, beim draufclicken eine Meldung, ob die Eingabe in der Datei enthalten ist, nur wenns nicht zuviel ist ...
jfheins
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 918
Erhaltene Danke: 158

Win 10
VS 2013, VS2015
BeitragVerfasst: Mi 18.11.20 20:53 
Sowas sollte eigentlich nach jedem guten Tutorial keine Hürde darstellen, aber ich habe es auch mal kurz selber gebastelt.

Wesentliche Teile (in der Reihenfolge MVC):
Model:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
    public class MyModel
    {
        public int StringIndex { get; set; }
        public bool IndexValid => StringIndex >= 0;
    }

View:
ausblenden HTML-Dokument
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
@model Web_Demo.Controllers.MyModel
@{
    ViewBag.Title = "Home Page";
}

<div class="jumbotron">
    <h1>ASP.NET</h1>
    <p class="lead">ASP.NET is a free web framework for building great Web sites and Web applications using HTML, CSS and JavaScript.</p>
    <p><a href="https://asp.net" class="btn btn-primary btn-lg">Learn more »</a></p>
</div>

<div class="row">
    <div class="col-md-4">

        @using (Html.BeginForm("Index""Home", FormMethod.Get))
        {
            <input type="text" name="demotextbox" autocomplete="off" />
        }

        @if (Model.IndexValid)
        {
            <p>String gefunden an Index @Model.StringIndex :-)</p>
        }
        else
        {
            <p>String nicht gefunden</p>
        }
    </div>
</div>

Controller:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
public class HomeController : Controller
{
    private static List<string> ExampleStrings = new List<string>
    {
        "Test""Hallo""Welt""Entwickler""Ecke"
    };


    [HttpGet]
    public ActionResult Index(string demotextbox = null)
    {
        var listIdx = ExampleStrings.IndexOf(demotextbox);

        return View(new MyModel { StringIndex = listIdx });
    }
}


Das einlesen aus einer Datei habe ich mir mal gespart und eine Liste in der Klasse erstellt. Aber das geht ja mit File.ReadAllLines() einfach ;-)
Einloggen, um Attachments anzusehen!
georgeboy Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 198



BeitragVerfasst: Do 19.11.20 08:28 
Also wirklich, vielen Dank für deine Mühe, ganz toll, ich werde dein Beispiel heute noch testen, bis dann ...
georgeboy Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 198



BeitragVerfasst: Do 19.11.20 10:33 
Doch noch ein Problem: bei "return View(new MyModel { StringIndex = listIdx } );"
kommt folgende Fehlermeldung:
ausblenden Fehler
1:
2:
Fehler  CS0246  Der Typ- oder Namespacename "MyModel" wurde nicht gefunden (möglicherweise fehlt eine using-Direktive oder ein Assemblyverweis).
    NeuerTest1  C:\Projekte\Web\NeuerTest1\Controllers\HomeController.cs  20  Aktiv


Moderiert von user profile iconTh69: C#-Tags hinzugefügt
Moderiert von user profile iconTh69: Code-Tags hinzugefügt
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Do 19.11.20 10:37 
Das gehört nun wirklich zu den Grundlagen von C#.
Und für Compilerfehler gibt es die Doku dazu: CS0246.
georgeboy Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 198



BeitragVerfasst: Do 19.11.20 10:49 
Das scheint mir kein C# Problem zu sein, sondern von ASP:NET MVC, da muss man nirgends ein Model, eine View, in den Controller explizit einbinden ...
georgeboy Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 198



BeitragVerfasst: Do 19.11.20 10:54 
Das Projekt das ich eröffnet habe, ist ein VS 2019 Community ASP.NET MVC, kein Core Projekt, aber das dürfte hier nicht das Problem sein, nur zur Information ...
georgeboy Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 198



BeitragVerfasst: Do 19.11.20 11:08 
So jetzt gehts doch, es muss heissen: "return View(new Models.MyModel { StringIndex = listIdx } );"
Jetzt habe ich lange gesucht, und Du hast mir geholfen, und dann auch noch so ausführlich, gibts nicht immer ! Danke !!!

Moderiert von user profile iconTh69: C#-Tags hinzugefügt
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Do 19.11.20 11:35 
Klar war das jetzt ein Problem mit dem Namensbereich (namespace), also ein C#-Problem. ;-)

PS: Ein "using Models" hätte es auch gelöst...
georgeboy Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 198



BeitragVerfasst: Do 19.11.20 15:32 
Th69 hast recht, der namespace "Models" wird offensichtlich von der IDE angelegt ...
georgeboy Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 198



BeitragVerfasst: Di 24.11.20 16:29 
Leider nerve ich wieder, habe bei deinem Beispiel folgendes hinzugefügt:
ausblenden HTML-Dokument
1:
2:
3:
<div>
     <img src="~/App_Data/MeinBild14.png"  alt=""/>
</div>

wird leider nicht angezeigt, nur ein kleines undefinierbares Fenster. Die Bilddatei "MeinBild14.png" habe ich schon an verschiedener Stelle eingefügt, ohne Erfolg ...

Moderiert von user profile iconTh69: HTML-Tags hinzugefügt