10 Stimmen

ASP.NET - ActionResult-Parameter ist immer null, wenn ein String übergeben wird - warum?

Ich fange gerade erst mit meinem ersten Projekt vom Typ ASP.NET MVC an und erstelle eine Detailseite, auf der ich anstelle der vordefinierten (int id) eine Zeichenfolge übergeben möchte. Aber wenn ich im Debug-Modus bin und dies in der URL eingebe, ist "myString" null. Warum ist das so? Muss ich noch etwas an anderer Stelle ändern?

Also, wenn ich die URL aufrufe und Folgendes eingebe:

http://localhost:2345/Bank/EmployeeDetails/3d34xyz

public ActionResult EmployeeDetails(string myString) // myString is null
{
    return View();
}

39voto

Tomas Aschan Punkte 55585

Im Global.asax.cs-Datei haben Sie standardmäßig die folgende Route zugeordnet:

routes.mapRoute(
    "Standard",
    "{controller}/{action}/{id}",
    new { controller = "Home", action = "Index", id = UrlParameter.Optional });

Das bedeutet, dass eine URL wie http://localhost:2345/Bank/EmployeeDetails/3d34xyz zum Bank-Controller, zur EmployeeDetails-Aktion führt und den Wert 3d34xyz in einen Parameter mit dem Namen id übergibt. Es ist vollkommen in Ordnung, einen String zu übergeben, aber um es funktionieren zu lassen, haben Sie zwei Optionen:

1) Benennen Sie die Variable in Ihrer Aktionsmethode in id um.

public ActionResult EmployeeDetails(string id) { ... }

2) Fügen Sie eine weitere Route hinzu, die mit einem beliebigen Namen für Ihren String übereinstimmt. Stellen Sie sicher, dass sie spezifischer als die Standardroute ist und platzieren Sie sie vor der Standardroute in der Global.asax.cs-Datei.

routes.mapRoute(
    "BankEmployeeDetails"
    "Bank/EmployeeDetails/{myString}"
    new { controller = "Bank", action = "EmployeeDetails", myString = UrlParameter.Optional });

Dies wird einen Standardwert von null an myString übergeben, wenn kein Wert in der URL übergeben wird, aber mit der von Ihnen angegebenen URL wird der Wert 3d34xyz übergeben.

1 Stimmen

Nur zur Information, ich habe einen kleinen Fehler in meinem Beitrag gefunden: Wenn Sie Option 2 wählen und eine neue Route hinzufügen, sollte sie spezifischer sein als die Standardroute, nicht allgemeiner, wie ich ursprünglich festgestellt habe. Dies liegt daran, dass das MVC-Framework die Routen der Reihe nach durchläuft und die erste auswählt, die übereinstimmt - daher möchten Sie sicherstellen, dass nur die relevanten URLs mit der neuen Route übereinstimmen.

0 Stimmen

Nur zur Information für alle, die suchen id = null könnte id = UrlParameter.Optional je nach Ihrer Version von .NET sein.

1 Stimmen

@MaximusPeters: Danke - wahrscheinlich wird heute niemand hier eine Version verwenden, in der null der richtige Weg ist, es zu tun :)

5voto

mmx Punkte 400975

Benennen Sie myString in id um, wenn Sie die Standard-Route-Tabelle verwenden.

5voto

David P Punkte 3594

Unter der Annahme, dass Sie die Standardrouten nicht geändert haben (In Ihrer Global.asax.cs):

        routes.MapRoute(
            "Default",                                              // Routenname
            "{controller}/{action}/{id}",                           // URL mit Parametern
            new { controller = "Home", action = "Index", id = "" }  // Parameterstandards
        );

Die Methode erwartet, dass es "id" genannt wird.

4voto

Daniel Earwicker Punkte 111630

Ändere den Namen von myString in id.

0voto

Kushal Punkte 17

Ich hatte das gleiche Problem, du musst einfach die id auf der Seite angeben, wo du den Hyperlink für Details (hier auf der Bankseite) hast

 @Html.ActionLink("Details", "Details", new { id=""}) 

Dies hat mein Problem gelöst, ich hoffe es hilft dir.

Das ist für MVC 5.

0 Stimmen

Dies funktioniert in diesem Fall nicht, sein Parametername ist nicht derselbe.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X