2017-01-16 64 views
1

這是我EmployeeController,我不明白爲什麼我可以訪問網址爲員工/索引/ 1與控制器參數action方法不能訪問

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); 
     } 

    } 
} 

/員工/指數 //當然不起作用,不夠公平,

/Employee/Index/1 //爲什麼它不起作用?與細節操作方法不一樣嗎?

/員工/詳細信息/ 1 //工作

/員工/指數?DepartmentID的= 1 //工作,但爲什麼/索引/ 1不起作用

回答

3

其中配置路由查找代碼。 Visual Studio很可能爲您生成了一些代碼,並將其放入方法RouteConfig.RegisterRoutes中。

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

列表中的第三項將被映射到名爲id的參數。您爲方法參數選擇的名稱很重要:asp.net mvc將使用反射來檢測您的參數名稱,並將它們與路由配置中設置的值進行匹配。

如果您在index方法改變參數的名稱id

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

然後id將匹配MapRoute引用的名字,你的代碼將工作。

2

我假設你沒有改變RouteConfig.cs

對於Employee/Index/1工作,你需要有:

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); 
    } 

} 

順便說一句:你說/Department/Details/1 //worked。我猜你的意思是/Employee/Details/1 //worked

1

,公司僱員/索引/ 1作品只有當你的參數名稱是ID

讓你的操作方法必須是這樣的:

public ActionResult index(int id) 

當然,你可以嘗試更改默認路由(控制器名稱/ actionName/id)

+0

如果您正在猜測某件事情,則表示您不確定問題是什麼 - 在這種情況下,發表評論(當您達到50+代表時)。 –

+0

請提供解釋爲什麼您不建議更改路由 - 這樣做在ASP.Net MVC中是非常常見的活動。在目前的狀態這是奇怪的建議,因此後值得downvote。 –

+0

這是我在這個網站的第一個答案,好吧,我改變了它 – YekiDige