c# - 无法访问 Controller 中带参数的操作方法

标签 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//当然不行,很公平,

/Employee/Index/1//为什么不起作用?不是和details action方法一样吗?

/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 中引用的名称,您的代码将起作用。

关于c# - 无法访问 Controller 中带参数的操作方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41670232/

相关文章:

c# - seed 方法适用于本地机器但不适用于 appharbor

asp.net - View 中对象或输出的缓存 : Which is better?

c# - 无法在编辑器中设置目标 .NET 版本

c# - 如何在用户不首先关注文本框的情况下读取条形码?

c# - 是否可以获取 IQueryable<T> 上使用的谓词 (Expression<Func<T,bool>>) 并将其应用于另一个 Lambda 函数?

c# - 你如何复制一个对象?

asp.net - 如何隐藏 AJAX HTML 编辑器底部工具栏

c# - Python 中的 BitConverter.DoubleToInt64Bits 等效项

asp.net - 是否有任何理由“不”在每个应用程序中实现异步 ASP.NET 网页?

asp.net-mvc - 从引用获取参数