2009-05-11 10 views
8

Ich beginne gerade mit meinem ersten Projekt auf dem ASP.NET MVC-Projekttyp und ich erstelle eine Details-Seite, wo ich statt der Vorlage (int id) lieber eine Zeichenfolge übergeben würde. Aber wenn ich im Debug-Modus bin, und dies in der URL eingeben, ist "myString" null. Warum? Muss ich noch etwas anderes ändern?ASP.NET - ActionResult-Parameter wird immer null zurückgegeben, wenn String übergeben wird - warum?

Also, wenn ich an die URL gehen und dieses eingeben:

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

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

Antwort

34

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

routes.mapRoute(
    "Default", 
    "{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 gehen, die EmployeeDetails Aktion und übergeben Sie den Wert 3d34xyz in ein Parameter mit dem Namen id. Es ist völlig in Ordnung, einen String zu übergeben, aber um es funktionieren zu lassen, haben Sie zwei Möglichkeiten:

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 dem von Ihnen gewünschten Namen übereinstimmt. Stellen Sie sicher, dass es spezifischer als die Standardroute ist, und platzieren Sie es vor die Standardroute in der Datei Global.asax.cs.

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

Dies wird einen Standardwert von null zu myString passieren, wenn kein Wert in der URL übergeben wird, aber mit der URL, die Sie Sie 3d34xyz den Wert angegeben wird vorübergehen.

+0

Mist. Ich war zu langsam ...: P –

+1

Noch besser! Sehen Sie, Sie werden für Ihre Bemühungen belohnt! Danke für die Lektion! Sehr geschätzt!!! –

+0

Froh, dass ich helfen konnte =) –

3

myString zu id umbenennen, wenn Sie die Standard-Route-Tabelle verwenden.

+0

Vielen Dank! Das ist es! –

1

Ändern Sie den Namen myString in id.

+0

Danke! Das ist es! –

4

Vorausgesetzt, dass Sie nicht die Standard-Routen geändert haben (in Ihrem Global.asax.cs):

 routes.MapRoute(
      "Default",            // Route name 
      "{controller}/{action}/{id}",       // URL with parameters 
      new { controller = "Home", action = "Index", id = "" } // Parameter defaults 
     ); 

Das Verfahren wird erwartet, dass es "id" genannt werden.

+0

Danke! Funktioniert perfekt! –

+0

Gern geschehen. –

+0

Entschuldigung, dass Sie von Ihnen stehlen ...;) –

0

hatte ich das gleiche Problem, man muss nur die ID auf der Seite an, wo Sie den Hyperlink für Einzelheiten (in der Bank Seite hier)

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

Das ist mein Problem gelöst hoffen, dass es Ihnen hilft.

Dies für MVC 5.

Verwandte Themen