1

我正在开发一个包含多个项目实体的 ASP.NET mvc 3 站点,然后每个项目都有几个关联的子页面,每个子页面都与项目的一个组件一起使用。

例如,我可以有一个包含几张照片、里程碑、用户信息等的项目。我有一个项目索引视图,以及一个链接到多个组件页面的项目主页。大多数组件都有两个视图,索引和编辑/视图。

所以我为编辑和视图设置了一条路线。请注意,我的路线位于名为 ProjectManagement 的区域中

   context.MapRoute(
            "ProjectManagement_ProjectPageSingle",
            "ProjectManagement/{controller}/{action}/{projectNumber}/{projectChildId}",
            new { controller = "Project", action = "Home" }
   );

我的控制器动作看起来都与此类似:

 public ActionResult Edit(string projectNumber, string projectChildId)

当我直接在浏览器中输入 URL 时,这很好用。例如:

~/ProjectManagement/Milestone/Edit/39999P110175/1   

但是,当我使用以下命令生成操作链接时:

 <a href="@Url.Action("Edit", new { projectNumber = Model.Project.ProjectNumber, projectChildId = entry.Id})">

操作 URL 最终如下所示:

~/ProjectManagement/Milestone/Edit/39999P110175?projectChildId=1

所以路线排序工作......但动作链接生成器没有?不知道从这里去哪里。任何建议将不胜感激。

请注意,在使用@Html.ActionLink 而不是@Url.Action 时会发生同样的事情。

谢谢!

4

2 回答 2

0

感谢迈克尔的回复。这是其他人的答案。

我有:

 context.MapRoute(
            "ProjectManagement_ProjectPage",
            "ProjectManagement/{controller}/{action}/{projectNumber}",
            new { controller = "Project", action = "Home"}
 );

 ///more routes

  context.MapRoute(
             "ProjectManagement_ProjectPageSingle",
             "ProjectManagement/{controller}/{action}/{projectNumber}/{projectChildId}",
             new { controller = "Project", action = "Home" }
  );

该 URL 也与 ProjectPage 路由匹配,因此它首先使用了那个。不得不颠倒顺序,所以更具体的路线首先出现。

谢谢。

于 2012-03-12T15:42:13.460 回答
0

您似乎没有指定区域名称:

@Url.Action(
    "Edit", 
    new { 
        projectNumber = Model.Project.ProjectNumber, 
        projectChildId = entry.Id,
        area = "ProjectManagement" 
    }
)

还要确保在您的区域注册中没有任何其他可能与此冲突的路线,如下所示:

public override void RegisterArea(AreaRegistrationContext context)
{
    context.MapRoute(
        "ProjectManagement_default",
        "ProjectManagement/{controller}/{action}/{projectNumber}/{projectChildId}",
        new { controller = "Project", action = "Home" }
    );
}
于 2012-03-12T15:40:20.167 回答