我正在开发一个包含多个项目实体的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})">
操作网址最终如下所示:
~/ProjectManagement/Milestone/Edit/39999P110175?projectChildId=1
所以路由sorta有效......但是动作链接生成器没有?不知道从哪里开始。任何建议将不胜感激。
请注意,使用@ Html.ActionLink而不是@ Url.Action时会出现同样的情况。
谢谢!
答案 0 :(得分: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" }
);
}
答案 1 :(得分:0)
感谢Michael的回复。这是其他人的答案。
我有:
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路由,因此首先使用了该URL。不得不翻转订单,所以首先是更具体的路线。
感谢。