无法访问Controller中带参数的action方法

时间:2017-01-16 05:54:32

标签: c# asp.net asp.net-mvc

这是我的EmployeeController,我不明白为什么我可以访问url作为Employee / Index / 1

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 //工作

/ Employee / Index?departmentId = 1 //工作但是为什么/ Index / 1不起作用

3 个答案:

答案 0 :(得分: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中引用的名称匹配,您的代码将有效。

答案 1 :(得分: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

答案 2 :(得分:1)

员工/索引/ 1仅在参数名称为 id

时有效

所以你的行动方法必须是这样的:

public ActionResult index(int id)

当然您可以尝试更改默认路由(controllerName / actionName / id)