【问题标题】:MVC3 and URLs (using areas, having an issue with building an <a> tag)MVC3 和 URL(使用区域,在构建 <a> 标记时遇到问题)
【发布时间】:2011-08-08 20:09:27
【问题描述】:

我遇到了区域问题并从中生成链接。这是我正在使用的代码的粗略结构:

首页
区域1
区域 1 内容
区域2
区域 2 内容
区域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”区域运行时没问题,但是当它在 home 区域之外运行时,它会产生奇怪的结果。

因此,例如,我在数据库中有一条记录调用 OPS。它应该创建一个到 OPS/OPS/INDEX 的链接(区域 = OPS,控制器 = OPS,操作 = INDEX)。在home“区域”,还可以,但是在某个区域时,会出现“http://localhost:17416/Home/OPS/OPS/INDEX”

能提供的任何帮助都会很棒!

提前谢谢大家。

【问题讨论】:

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


    【解决方案1】:

    您必须更改代码以在链接中指定一个区域,如下所示:

    @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());
    }   
    

    希望这会有所帮助...

    【讨论】:

    • @Html 用于剃须刀引擎,它在 C# 代码中不起作用。这个想法是正确的,我只需要像 Javad_Amiry 在另一个解决方案中所说的那样使用 Url.Action。感谢您的帮助。
    • @SlackerCoder - 我知道,但我以为你说过你在 _layout.cshtml 中生成了这个。没关系,我很乐意提供帮助......
    【解决方案2】:

    使用这个:

    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
        );
    

    【讨论】:

      【解决方案3】:

      上面标记的答案将不起作用,该区域应该在A大写

      @Url.Action("Action", "Controller", new { Area = "AreaName" }, null)
      @Html.ActionLink("Label", "Action", "Controller", new { Area = "AreaName" }, null)
      

      【讨论】:

        猜你喜欢
        • 2011-09-03
        • 1970-01-01
        • 2015-03-04
        • 2012-02-19
        • 2021-08-02
        • 1970-01-01
        • 1970-01-01
        • 2014-12-18
        • 2020-10-02
        相关资源
        最近更新 更多