这是我的EmployeeController,我不明白为什么我可以以Employee / Index / 1的身份访问url
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 //当然行不通,很公平,
/ Employee / Index / 1 //为什么不起作用?与细节动作方法不一样吗?
/ Employee / Details / 1 //工作
/ Employee / Index?departmentId = 1 //有效,但为什么/ Index / 1不起作用
查找您在其中配置路由的代码。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
您的代码将起作用。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句