MVC3 и URL-адреса (при использовании областей возникают проблемы с созданием тега <a>) - PullRequest
4 голосов
/ 09 августа 2011

У меня проблема с областями и создание ссылок из них. Вот примерная структура кода, с которым я работаю:

Дом
Area1
Содержание области 1
Area2
Содержание области 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. Когда код выполняется в «домашней» области, это нормально, но когда он выполняется за пределами домашней области, он генерирует странные результаты.

Так, например, у меня есть запись в базе данных вызова OPS. Следует создать ссылку на OPS / OPS / INDEX (область = OPS, контроллер = OPS, действие = INDEX). В домашнем "районе" все хорошо, но когда оно в районе, оно выходит "http://localhost:17416/Home/OPS/OPS/INDEX"

Любая помощь, которая может быть оказана, будет великолепна!

Заранее всем спасибо.

Ответы [ 3 ]

7 голосов
/ 09 августа 2011

Вы должны изменить свой код, чтобы указать область в ссылке следующим образом:

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

Надеюсь, это поможет ...

6 голосов
/ 09 августа 2011

используйте это:

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
    );
0 голосов
/ 24 сентября 2014

Этот ответ, отмеченный выше, не сработает, область должна быть в столице A

@Url.Action("Action", "Controller", new { Area = "AreaName" }, null)
@Html.ActionLink("Label", "Action", "Controller", new { Area = "AreaName" }, null)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...