Ich bin völlig neu in ASP.Net und ich bin sicher, dass dies eine sehr grundlegende Frage ist. Ich habe eine Ansicht, in der es einen Link zum Generieren eines Berichts gibt. Um jedoch einen Bericht erstellen zu können, muss ich den Benutzer bitten, einen geeigneten Textnamen als anzugeben Gut.
Bisher konnte ich Daten vom Server zur Ansicht übergeben, indem ich Modelle verwendete, die von meinem Controller zur Ansicht übergeben wurden, aber ich bin nicht sicher, wie ich Daten von der Ansicht zu meinem Controller übergeben soll.
In diesem Fall muss ich nur eine Zeichenfolge aus der Ansicht an den Controller übergeben.
Jeder Rat mit Beispiel wird geschätzt.
AKTUALISIEREN
Ich verstehe, dass ich die Daten zurück auf den Server stellen muss, aber wie wird dies in Form von Razorhtml-Code und Controller realisiert?
quelle
Antworten:
Sie können dies mit ViewModels tun, z. B. wie Sie Daten von Ihrem Controller an die Anzeige übergeben haben.
Angenommen, Sie haben ein solches Ansichtsmodell
public class ReportViewModel { public string Name { set;get;} }
und in Ihrer GET-Aktion,
public ActionResult Report() { return View(new ReportViewModel()); }
und Ihre Ansicht muss stark getippt sein
ReportViewModel
@model ReportViewModel @using(Html.BeginForm()) { Report NAme : @Html.TextBoxFor(s=>s.Name) <input type="submit" value="Generate report" /> }
und in Ihrer HttpPost- Aktionsmethode in Ihrem Controller
[HttpPost] public ActionResult Report(ReportViewModel model) { //check for model.Name property value now //to do : Return something }
ODER Sie können dies einfach ohne die POCO-Klassen (Viewmodels) tun.
@using(Html.BeginForm()) { <input type="text" name="reportName" /> <input type="submit" /> }
Verwenden Sie in Ihrer HttpPost-Aktion einen Parameter mit demselben Namen wie der Name des Textfelds.
[HttpPost] public ActionResult Report(string reportName) { //check for reportName parameter value now //to do : Return something }
EDIT: Wie im Kommentar
Wenn Sie auf einem anderen Controller posten möchten, können Sie diese Überladung der BeginForm-Methode verwenden.
@using(Html.BeginForm("Report","SomeOtherControllerName")) { <input type="text" name="reportName" /> <input type="submit" /> }
Daten von der Aktionsmethode an die Ansicht übergeben?
Sie können dasselbe Ansichtsmodell verwenden, indem Sie einfach die Eigenschaftswerte in Ihrer GET-Aktionsmethode festlegen
public ActionResult Report() { var vm = new ReportViewModel(); vm.Name="SuperManReport"; return View(vm); }
und aus Ihrer Sicht
@model ReportViewModel <h2>@Model.Name</h2> <p>Can have input field with value set in action method</p> @using(Html.BeginForm()) { @Html.TextBoxFor(s=>s.Name) <input type="submit" /> }
quelle
Falls Sie nicht posten möchten / müssen:
@Html.ActionLink("link caption", "actionName", new { Model.Page }) // view's controller @Html.ActionLink("link caption", "actionName", "controllerName", new { reportID = 1 }, null); [HttpGet] public ActionResult actionName(int reportID) {
Beachten Sie, dass die reportID im neuen Teil {} mit der reportID in den Aktionsparametern übereinstimmt. Sie können auf diese Weise eine beliebige Anzahl von Parametern hinzufügen. Bei mehr als 2 oder 3 (einige argumentieren immer) sollten Sie ein Modell über einen POST übergeben ( wie nach anderer Antwort)
Bearbeiten : Null hinzugefügt für korrekte Überladung, wie in den Kommentaren angegeben. Es gibt eine Reihe von Überladungen. Wenn Sie beide Aktionen + Controller angeben, benötigen Sie sowohl routeValues als auch htmlAttributes. Ohne den Controller (nur Beschriftung + Aktion) werden nur routeValues benötigt, es kann jedoch eine bewährte Methode sein, immer beide anzugeben.
quelle
<form action="myController/myAction" method="POST"> <input type="text" name="valueINeed" /> <input type="submit" value="View Report" /> </form>
Regler:
[HttpPost] public ActionResult myAction(string valueINeed) { //.... }
quelle