Autor |
Beitrag |
georgeboy
Beiträge: 211
|
Verfasst: 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
Beiträge: 211
|
Verfasst: So 15.11.20 16:38
Wie greift man vom Controller aus, auf den Inhalt einer TextBox, auf der View zu ?
|
|
jfheins
Beiträge: 918
Erhaltene Danke: 158
Win 10
VS 2013, VS2015
|
Verfasst: 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
Beiträge: 211
|
Verfasst: Mo 16.11.20 15:49
Bei VS 2019 Community ASP.NET MVC Controller, konnte ich die TextBox mit der Id nicht ansprechen ...
|
|
jfheins
Beiträge: 918
Erhaltene Danke: 158
Win 10
VS 2013, VS2015
|
Verfasst: 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:
Einloggen, um Attachments anzusehen!
|
|
georgeboy
Beiträge: 211
|
Verfasst: 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
Beiträge: 918
Erhaltene Danke: 158
Win 10
VS 2013, VS2015
|
Verfasst: 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:
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:
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
Beiträge: 211
|
Verfasst: 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
Beiträge: 918
Erhaltene Danke: 158
Win 10
VS 2013, VS2015
|
Verfasst: 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
Beiträge: 211
|
Verfasst: 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
Beiträge: 918
Erhaltene Danke: 158
Win 10
VS 2013, VS2015
|
Verfasst: 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:
C#-Quelltext 1: 2: 3: 4: 5:
| public class MyModel { public int StringIndex { get; set; } public bool IndexValid => StringIndex >= 0; } |
View:
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:
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
Beiträge: 211
|
Verfasst: 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
Beiträge: 211
|
Verfasst: Do 19.11.20 10:33
Doch noch ein Problem: bei " return View(new MyModel { StringIndex = listIdx } );"
kommt folgende Fehlermeldung:
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 Th69: C#-Tags hinzugefügt
Moderiert von Th69: Code-Tags hinzugefügt
|
|
Th69
Beiträge: 4784
Erhaltene Danke: 1055
Win10
C#, C++ (VS 2017/19/22)
|
Verfasst: 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
Beiträge: 211
|
Verfasst: 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
Beiträge: 211
|
Verfasst: 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
Beiträge: 211
|
Verfasst: 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 Th69: C#-Tags hinzugefügt
|
|
Th69
Beiträge: 4784
Erhaltene Danke: 1055
Win10
C#, C++ (VS 2017/19/22)
|
Verfasst: 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
Beiträge: 211
|
Verfasst: Do 19.11.20 15:32
Th69 hast recht, der namespace "Models" wird offensichtlich von der IDE angelegt ...
|
|
georgeboy
Beiträge: 211
|
Verfasst: Di 24.11.20 16:29
Leider nerve ich wieder, habe bei deinem Beispiel folgendes hinzugefügt:
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 Th69: HTML-Tags hinzugefügt
|
|