c# - 是否可以在运行时在 MVC3 中添加路由?

标签 c# asp.net-mvc-3 routes


我正在为本地一所大学使用 MVC3 和 C# 创建一个项目。要求是在浏览器中输入类似 www.mysite.com/teachercode 的内容时显示教师资料。

我在我的教师 Controller 类中创建了一个方法 ShowTeacher。我的计划是在申请开始时查找数据库,并为每位教师注册如下所示的相同路线,这将进一步处理请求,这种方法是否正确?

foreach(Teacher tch in TeacherCollection)
routes.MapRoute(
            "Teacher route" + tch.Id,
            tch.TeacherCode,
            new { controller = "Teacher", action = "ShowTeacher" }
        );

其次,如果在数据库中添加了一个新的老师,是否可以在保存老师后立即添加路线?

提前致谢

最佳答案

您不需要在运行时添加路由,而是可以设置一个路由来捕获 www.mysite.com/teachercode 形式的 URL,只要您的teachercodes 与您的任何 Controller 同名。

RegisterRoutes 中,添加另一个路由(需要是第一个),它将查询路由到 ShowTeacher 的操作方法你的 TeacherController,以及一个 route constraint .

routes.MapRoute(
    "Teacher route", // route name
    "{teacherCode}", // url
    new { controller = "Teacher", action = "ShowTeacher" }, // defaults
    new { teacherCode = @"[A-Za-z]{1,10}" } // constraints
    );

此示例中的约束 - @"[A-Za-z]{1,10}" - 指定 teachercode 将仅包含大写或小写字母,长度在 1 到 10 个字符之间。您可以根据自己的需要进行调整。

关于c# - 是否可以在运行时在 MVC3 中添加路由?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10784100/

相关文章:

c# - 将 json 字符串中的 bool 值转换为 int

c# - 如何将项目添加到 ASP.NET 中的下拉列表?

c# - 将鼠标悬停在条形图上时使用 ASP.NET MVC 3.0 显示列标签

php - CodeIgniter - 如何删除 url 路由中的类名

c# - 如何在 C# WinForms 中实现应用按钮功能?

c# - Repository不能作为泛型方法中的类型参数

asp.net-mvc-3 - 在 Mvc3 中在图像上显示工具提示

asp.net-mvc-3 - 放置模板 View 和主干 View 代码的最佳实践是什么

routes - 如何获取 Sinatra 应用程序中使用的所有路线的列表?

ruby-on-rails - 覆盖嵌套的命名路由参数