2017-01-16 65 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