MVC3路由 - 相互构建的路由

时间:2011-10-04 12:11:26

标签: asp.net-mvc-3 c#-4.0 asp.net-mvc-routing

我的项目中有AREA设置。我需要使该区域的路线渐进,这意味着该路线将相互建立。

我把它看作链接列表。列表中的每个节点都将引用父节点。在它构建的列表中从左向右移动,从右到左移动它。

在该地区,我有公司,有联系人和儿童公司。

例如,我有公司会有以下内容:

 /Companies/list
  /Company/{Id}
  /Company/{id}/add
  /Company/{id}/edit
  /Company/{id}/delete

对于联系部分,我需要创建以下路线:

 /Company/{id}/contacts/list
 /Company/{id}/contact/{id}/add
 /Company/{id}/contact/{id}/edit
 /Company/{id}/contact/{id}/delete

如何确保/ Company / {id}始终位于路线的Contact and Child Company部分?

我希望我的问题清楚。

1 个答案:

答案 0 :(得分:2)

主观一般性(用少量盐):

首先,您正在为公司使用公司(单数),但之后您正在使用联系人(复数)作为联系人。从结构的角度来看,这没有什么不妥,但如果你的复数与你的复数一致,你的用户会感谢你。我会在两种情况下使用复数,但这只是我的偏好...它看起来更像英语。

您还使用小写字母表示联系人,但大写字母表示公司。看起来不专业。

接下来令人困惑的是你使用了两个{id}参数,一个用于公司,一个用于联系人。我认为这些分别是公司和联系人的ID。但我很困惑,但作为人类,我能够推断出与计算机不同的背景。因此,您最好在路线中指定参数。即:

/Companies/{CompanyId}/Contacts/{ContactId}/[action]

通过示例回答您的问题:

我觉得你不能正确理解路线。如果你这样做了,那么你的问题会更具体。

您的路线参数可能来自多个来源,具体取决于路线的请求方式。

您可以将其硬编码到链接中。或者,更有用的是,您的路线注册将用于捕获映射到您的操作签名的请求。

例如,我有一个电子教学应用程序,包括导师,学生,课程和步骤(即,步骤就像课程的一部分,学生逐步推进课程)

路线注册类似于:

路线或区域注册

context.MapRoute(
    "StepDisplay",
    "Course/{CourseId}/Step/{StepOrder}/Pupil/{PupilName}/{TutorName}",
    new { controller = "Course", action = "Display", TutorName = UrlParameter.Optional },
new[] { "ES.eLearningFE.Areas.Courses.Controllers" }
);

此路由将捕获来自以下ActionLink的请求:

视图中的ActionLink:

@Html.ActionLink(@StepTitle, MVC.Courses.Course.Actions.Display(Model.CourseId, step.StepOrder, Model.Pupil.UserName, tutorName))

现在,我只需要向您展示Display动作的签名:

<强> CoursesController:

public virtual ActionResult Display(int CourseId, int StepOrder, string PupilName, string TutorName)

这里有几点需要注意:

  1. 我可以通过向用户提供点击链接来调用此特定路线。

  2. 我使用Html.ActionLink助手

  3. 构建此链接
  4. 我使用过David Ebbo的t4mvc nuget包,这样我就可以指定我正在调用的动作及其参数。我的意思是使用:

    指定Html.ActionLink助手的ActionResult参数

    MVC.Courses.Course.Actions.Display(Model.CourseId,step.StepOrder,Model.Pupil.UserName,tutorName)

  5. 如果您考虑一下,路由的作用是将请求的url转换为动作,因此我的路由的参数是控制器名称,动作名称,否则它们是动作签名中的参数名称

      

    您现在可以看到为什么用相同的方式命名两个不同的路由参数   名字是一个坏主意(主要是因为它不起作用)。

    因此,请查看您的行动签名,并设计您的路线和行动链接,以便将所有内容结合在一起。

    MVC无法通过魔法发挥作用!! (虽然它使用名称约定的方式可能会让你相信它)