2017-03-26 6 views
0

Ich baue eine Webanwendung für einen Parser. Die Homepage ist eine einfache Rasiereransicht mit grundlegenden Steuerelementen, mit denen der Benutzer die Eingabe hinzufügen und später die Ergebnisse der Analyse anzeigen kann. Eine der Komponenten dieser Hauptseite ist eine ViewComponent, die eine der beiden relevanten Teilansichten für die Funktionalität des Parsers zurückgibt: eine erste Ansicht, mit der der Benutzer die Eingabe hinzufügen kann, und eine Ergebnisansicht mit der Ausgabe. Die Entscheidung, ob die eine oder die andere Ansicht angezeigt wird, hängt von einer bool-Variablen ab, "parsed", die registriert, ob der Benutzer Eingaben hinzugefügt und geparst hat oder nicht. Wir rufen die Hauptseite "Home", die Eingabeansicht "Main" und die Ausgabeansicht "Results" auf. Wenn der Benutzer eine Eingabe hinzufügt und auf die Schaltfläche "Analysieren" klickt, wird "geparst" wahr und die Ergebnisansicht wird geladen.asp-route- [Parameter] wird nicht zu route/url hinzugefügt. Warum?

Ich habe die Logik und die Routen für dieses Verhalten konfiguriert, und ich kann es ohne ein Problem testen, wenn ich die Routen manuell eintippe und den optionalen Parameter hinzufüge. So funktionieren zum Beispiel alle diese richtig:

  • localhost: 1111/-> Zeigt Main.
  • localhost: 1111 /? Parsed = false -> Zeigt Main.
  • localhost: 1111 /? Parsed = true -> Zeigt das Ergebnis an.
  • localhost: 1111/parser /? Parsed = false -> Zeigt Main, so weiter und so fort.

Was ist das Problem dann? Wenn ich den "Parse" Knopf drücke, kann ich nicht veranlassen, dass das System die erwartete URL localhost: 1111 /? Parsed = true abruft, stattdessen localhost: 1111 /?. Von this tutorial (und viele mehr, die ich gelesen habe) verstehe ich, dass ich asp-route- [parameter] verwenden muss, und dass es die Signatur der Methode, die in asp-Aktion aufgerufen wird, übereinstimmen muss, aber ich kann es nicht funktionieren lassen.

Dies ist die Taste in Frage:

<div class="col-2"> 
    <form> 
     <button class="button" 
       asp-controller="Home" asp-action="Index" 
       asp-route-parsed="true"> 
      Start Parsing 
     </button> 
    </form> 
</div> 

Und das ist die Methode es nennt:

[Route("parser/{parsed:bool?}")] 
    [Route("/{parsed:bool?}")] 
    [Route("")] 
    public ViewResult Index(bool parsed = false) { 
     ViewData["Title"] = "Home"; 

     if (parsed == true) { 
      Helper.parsed = true; 
     } else { 
      Helper.parsed = false; 
     } 

     return View("Index", Helper); 
    } 

Ich werde wirklich eine Orientierung hier zu schätzen wissen, habe ich einige Artikel gelesen, und die Dokumentation, aber kann nicht sehen, wo das Problem ist. In jedem möchte sich das ganze System ansehen, the code is available here. Danke im Voraus.

Antwort

0

Sie benötigen kein Formular, um zu einer Aktion umzuleiten. Verwenden Sie einfache Verbindungen wie:

<div class="col-2"> 
    <a class="button" 
      asp-controller="Home" asp-action="Index" 
      asp-route-parsed="true"> 
     Start Parsing 
    </a> 
</div> 

Auch das Löschen aller [Route] Elemente aus dem Verfahren wird die gewünschte Verbindung erzeugen.

+0

Leider ist das nicht der Fall, ich habe Ihren Vorschlag ausprobiert und selbst wenn das Projekt kompiliert und ausgeführt wird. Der Knopf ist tot. Kann dies etwas mit verlorenem _asp-route-parsed_ param zu tun haben? Danke! – Edword

+0

Ich habe das gerade getestet und es läuft perfekt. Ich habe den Wert korrekt an den Controller übergeben. Die URL ist 'localhost/parser/value'. –

Verwandte Themen