我遇到区域问题并从中生成链接。这是我正在使用的代码的粗略结构:
家庭
区域1
区域1内容
区域2
区域2内容
区域3
区域3内容
在我的_layout.cshtml文件中,我生成一个菜单(完全由表驱动):
foreach (MainMenu mm in parentMenus)
{
List<SubMenu> theseChildren = childMenus.Where(o => o.MainMenuId == mm.MainMenuId).OrderBy(p => p.Ordering).ToList();
result.Append(String.Format(@"<h3><a href='#'>{0}</a></h3>", mm.Name));
result.Append(String.Format(@"<div>"));
result.Append(String.Format(@"<p>"));
foreach(SubMenu sm in theseChildren){
//Issue is here:
result.Append(String.Format(@"<a href='{0}/{1}/{2}'>{3}</a> <br />", sm.AreaName == null ? String.Empty : sm.AreaName, sm.ControllerName, sm.ActionName, sm.Name));
}
result.Append(String.Format(@"</p>"));
result.Append(String.Format(@"</div>"));
}
它的构建是因为它是为手风琴(jQuery)生成的。
所以,问题出在foreach循环中。当代码在“Home”区域运行时,它很好,但是当它在本地区域外运行时,它会产生奇怪的结果。
所以,例如,我在数据库中有一个记录OPS。它应该创建一个指向OPS / OPS / INDEX的链接(area = OPS,Controller = OPS,Action = INDEX)。在家庭“区域”,它很好,但当它在一个区域,它出来“http:// localhost:17416 / Home / OPS / OPS / INDEX”
任何可以提供的帮助都会很棒!
先谢谢大家。
答案 0 :(得分:7)
您必须更改代码以在链接中指定区域,如下所示:
@Html.ActionLink("Label", "Action", "Controller", new { area = "Area" }, null)
这应该有效:
foreach(SubMenu sm in theseChildren){
result.Append(@Html.ActionLink(sm.Name, sm.ActionName, sm.ControllerName, new { area = sm.AreaName }, null).ToHtmlString());
}
希望这会有所帮助......
答案 1 :(得分:6)
使用它:
String.Format(
"<a href='{0}'>some text you want</a>",
Url.Action("ActionName", "ControllerName", new { area = "AreaName" })
);
而不是:
String.Format(
@"<a href='{0}/{1}/{2}'>{3}</a> <br />",
sm.AreaName == null ? String.Empty : sm.AreaName,
sm.ControllerName,
sm.ActionName, sm.Name)
例如:
String.Format(
"<a href='{0}'>{1}</a>",
Url.Action(sm.ActionName, sm.ControllerName, new { area = sm.AreaName }),
sm.Name
);
答案 2 :(得分:0)
以上标记的答案将不起作用该区域应该在A大写
@Url.Action("Action", "Controller", new { Area = "AreaName" }, null)
@Html.ActionLink("Label", "Action", "Controller", new { Area = "AreaName" }, null)