2017-01-16 2 views
1

Das ist mein EmployeeController, ich verstehe nicht, warum ich url als Angestellte/Index/1Aktionsmethode mit dem Parameter in Controller kann nicht zugegriffen werden

namespace MVCDemo.Controllers 
{ 
    public class EmployeeController : Controller 
    { 

     public ActionResult index(int departmentId) 
     { 
      EmployeeContext employeeContext = new EmployeeContext(); 
      List<Employee> employee = employeeContext.Employees.Where(emp => emp.DepartmentId == departmentId).ToList(); 

      return View(employee); 
     } 

     public ActionResult Details(int id) 
     { 
      EmployeeContext employeeContext = new EmployeeContext(); 
      Employee employee = employeeContext.Employees.Single(emp => emp.EmployeeId == id); 

      return View(employee); 
     } 

    } 
} 

/Mitarbeiter/Index zugreifen // funktioniert natürlich nicht, gut genug,

/Mitarbeiter/Index/1 // warum es nicht funktioniert? ist es nicht das gleiche wie Details Aktionsmethode?

/Mitarbeiter/Details/1 // arbeitete

/Mitarbeiter/Index? DepartmentID = 1 // gearbeitet, aber warum/Index/1 funktioniert nicht

Antwort

3

den Code finden, wo Sie die Routen konfigurieren . Sehr wahrscheinlich hat Visual Studio etwas Code für Sie generiert und in die Methode RouteConfig.RegisterRoutes eingefügt.

routes.MapRoute(
     name: "Default", 
     url: "{controller}/{action}/{id}", 
     defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
    ); 

Das dritte Element in der Liste wird auf einem id genannt Parameter abgebildet werden. Der Name, den Sie für Ihre Methodenparameter auswählen, ist wichtig: asp.net mvc verwendet Reflektion, um Ihre Parameternamen zu erkennen und diese mit den in der Routenkonfiguration festgelegten Werten abzugleichen.

Wenn Sie den Namen des Parameters in Ihrem index Methode id geändert:

public ActionResult Index(int id) 
    { 
     ... 
    } 

dann id die in MapRoute referenzierten Namen übereinstimmen, und der Code funktioniert.

2

Ich gehe davon aus, dass Sie nicht RouteConfig.cs

Für Employee/Index/1 geändert haben zu arbeiten, Sie haben müssen:

public class EmployeeController : Controller 
{ 

    // Employee/Index/1 
    public ActionResult Index(int id) 
    { 
     EmployeeContext employeeContext = new EmployeeContext(); 
     List<Employee> employee = employeeContext.Employees.Where(emp => emp.DepartmentId == departmentId).ToList(); 

     return View(employee); 
    } 

} 

Btw: Sie sagten /Department/Details/1 //worked. Ich denke, man /Employee/Details/1 //worked

1

Angestellte/Index/1 Werke bedeuten nur, wenn Ihr Parameternamen id ist

so Ihre Aktion-Methode so sein muss:

public ActionResult index(int id) 

natürlich können Sie versuchen, Ändern Sie das Standard-Routing (ControllerName/ActionName/ID)

+0

Wenn Sie etwas erraten, bedeutet es, dass Sie nicht sicher sind, was das Problem ist - in diesem Fall post Kommentar (wenn Sie zu 50+ Rep erhalten). –

+0

Bitte erläutern Sie, warum Sie das Ändern des Routings nicht empfehlen - dies ist eine recht regelmäßige Aktivität in ASP.Net MVC. Im momentanen Zustand ist es eine merkwürdige Empfehlung und somit verdient posts einen Downvote. –

+0

Dies war meine erste Antwort hier auf dieser Seite, ok, ich änderte es – YekiDige

Verwandte Themen