c# - deutsch - asp.net mvc example



ASP.NET MVC-Übergabe von Parametern an den Controller (7)

Der Grund für die spezielle Behandlung von "id" ist, dass es zum Standard-Routenkartierung hinzugefügt wird. Um dies zu ändern, gehen Sie zu Global.asax.cs, und Sie finden die folgende Zeile:

routes.MapRoute ("Default", "{controller}/{action}/{id}", 
                 new { controller = "Home", action = "Index", id = "" });

Ändere es zu:

routes.MapRoute ("Default", "{controller}/{action}", 
                 new { controller = "Home", action = "Index" });

https://ffff65535.com

Ich habe einen Controller mit einer Aktionsmethode wie folgt:

public class InventoryController : Controller
{
    public ActionResult ViewStockNext(int firstItem)
    {
        // Do some stuff
    }
}

Und wenn ich es starte, bekomme ich einen Fehler, der besagt:

Das Parameterwörterbuch enthält keinen gültigen Wert vom Typ 'System.Int32' für den Parameter 'firstItem'. Um einen Parameter als optional zu definieren, sollte sein Typ entweder ein Referenztyp oder ein Nullable-Typ sein.

Ich hatte es an einem Punkt funktioniert und ich beschloss, die Funktion ohne Parameter zu versuchen. Als ich feststellte, dass der Controller nicht beständig war, habe ich den Parameter wieder eingefügt. Jetzt weigert er sich, den Parameter zu erkennen, wenn ich die Methode aufruft.

Ich verwende diese URL-Syntax, um die Aktion aufzurufen:

http://localhost:2316/Inventory/ViewStockNext/11

Irgendwelche Ideen, warum ich diesen Fehler bekommen würde und was ich tun muss, um es zu beheben?

Ich habe versucht, eine andere Methode hinzuzufügen, die eine Integer zur Klasse nimmt, die es auch mit demselben Grund fehlschlägt. Ich habe versucht, einen zu addieren, der eine Zeichenkette nimmt, und die Zeichenkette wird auf null gesetzt. Ich habe versucht, eins ohne Parameter hinzuzufügen, und das funktioniert gut, aber natürlich wird es meinen Bedürfnissen nicht entsprechen.


Es gibt einen anderen Weg, dies zu erreichen (näher beschrieben in Stephen Walthers Pager-Beispiel)

Im Wesentlichen erstellen Sie einen Link in der Ansicht:

Html.ActionLink("Next page", "Index", routeData)

In routeData können Sie Name / Wert-Paare angeben (zB routeData ["page"] = 5), und in der Controller-Index-Funktion erhalten die entsprechenden Parameter den Wert. Das ist,

public ViewResult Index(int? page)

Die Seite wird als 5 übergeben. Ich muss zugeben, es ist ziemlich ungewöhnlich, dass die Zeichenfolge ("Seite") automatisch eine Variable wird - aber so funktioniert MVC auch in anderen Sprachen ...


Ihr Routing muss in der Art von {controller}/{action}/{firstItem} . Wenn Sie das Routing als Standard {controller}/{action}/{id} in Ihrer Datei global.asax.cs , müssen Sie die id .

routes.MapRoute(
    "Inventory",
    "Inventory/{action}/{firstItem}",
    new { controller = "Inventory", action = "ListAll", firstItem = "" }
);

... oder etwas in der Nähe.


Oder Sie können versuchen, den Parametertyp in "Zeichenfolge" zu ändern und dann die Zeichenfolge in eine Ganzzahl in der Methode zu konvertieren. Ich bin neu in MVC, aber ich glaube, dass Sie NULL-fähige Objekte in Ihrer Parameterliste benötigen. Wie sonst wird der Controller anzeigen, dass kein solcher Parameter bereitgestellt wurde? Damit...

public ActionResult ViewNextItem(string id)...

Um Jarret Meyers Antwort umzuformulieren, müssen Sie den Parameternamen in "id" ändern oder eine Route wie folgt hinzufügen:

routes.MapRoute(
        "ViewStockNext", // Route name
        "Inventory/ViewStockNext/{firstItem}",  // URL with parameters
        new { controller = "Inventory", action = "ViewStockNext" }  // Parameter defaults
    );

Der Grund dafür ist, dass die Standardroute nur nach Aktionen ohne Parameter oder nach einem Parameter namens 'id' sucht.

Bearbeiten: Heh, vergiss Jarret hat nach dem Posten ein Routenbeispiel hinzugefügt.


Verwenden der ASP.NET-Core-Tag-Hilfefunktion:

<a asp-controller="Home" asp-action="SetLanguage" asp-route-yourparam1="@item.Value">@item.Text</a>

public ActionResult ViewNextItem(int? id) macht die id Ganzzahl zu einem Nullwert-Typ und benötigt keine Zeichenfolge für <-> int-Konvertierungen.





asp.net-mvc