这是我的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不起作用
答案 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)