我在asp.net mvc 4中有以下页面结构。
Department Full Time Employees Part Time Employees
----------- ---------------------------------------------
Department 1 |1. Employee 1
Department 2 |2. Employee 2
|
部门1,部门2,全职员工和兼职员工是链接。单击任何链接都会显示一些员工。以下是可能的选项
我不知道如何构建这些不同链接的操作链接。我瞄准的目标结果是
www.example.com/Department2/parttime
由于
更新
这里的问题是如何构建动作链接而不是如何将它们路由到控制器。目前我有一个动作是我的家庭控制器接受部门和全职/兼职。我无法弄清楚的是如何跟踪事物。例如,如果用户在选择了部门2时单击“部件时间”链接,则“部件时间”链接如何将所选部门传达给操作方法,以便控制器知道必须显示所选部门的兼职员工。与选择“部分时间”类似,如果用户单击“部门”,部门的链接如何将信息传达给控制器,以便在单击的部门中显示兼职员工。
答案 0 :(得分:0)
据我所知,我认为您需要的是路由。看看
和接受的答案。简要说明如何创建自定义路由以实现上述描述。您将需要创建一个控制器,其中包含两个参数string department
和另一个参数(字符串或枚举或DefaultModelBinder
可以绑定的任何内容)的全部或非全部参数,然后将您的路径映射到这个控制器和行动。
由于路由是双向的,因此必须正确映射路由才能创建正确的操作链接。正如您在msdn中看到的那样,System.Web.Routing.Route
类还有一个虚方法GetVirtualPath
。一旦你尝试使用Html.ActionLink
- 方法(或其中一个重载)创建一个actionlink,框架将“查询”路由(遵守路由约束等)并构建所谓的虚拟路径基于提供的路线值。
假设您创建了一个名为HomeController
的控制器,其外观类似于
public sealed class HomeController : Controller
{
public ActionResult Index(string department, EmployeeType employeeType)
{
/* ... */
}
}
public enum EmployeeType
{
FullTime,
PartTime,
}
你可以创建一个actionlink(在任何视图中),如下所示:
Html.ActionLink(
"Full-time employees of department 1",
"Index", // action
"Home", // controller
new
{
department = "Department1", // first argument
employeeType = EmployeeType.FullTime, // second argument
},
htmlAttributes: null);
然后,只要匹配的路由正确实现GetVirtualPath
(无论这意味着什么),就会根据您的需要创建一个带网址的链接。默认实现可以创建一个类似/Home/Index?department=Department1&employeeType=0
的网址。然后,您需要从System.Web.Routing.Route
派生,覆盖并实施GetVirtualPath
并在App_Start
或Global.asax
中注册路线。