Asp.Net MVC SiteMap - siteMapNode: Как перенаправить в контроллер ActionResult - PullRequest
2 голосов
/ 04 августа 2011

У меня есть простое меню, основанное на стандартной карте сайта xml, что при нажатии на ссылку я хочу, чтобы она опубликовала результат действия контроллера, который не имеет представления / страницы.У меня, кажется, нет проблемы, когда у меня есть вид или страница или другой веб-сайт для URL, но я, кажется, не могу просто перейти к желаемому результату действия контроллера ... оттуда я буду делать некоторые дополнительные вещии возврат / перенаправление и т. д., проблема заключается в получении результата действия соответствующего контроллера из критериев / атрибутов / элементов, определенных в siteMapNode.

применимый фрагмент карты сайта:

<siteMapNode url="~/Home/Test" title="Test SubMenu" description="Test SubMenu" roles="*"> 
  <siteMapNode url="~/Home/TestActionResult" title="Test ActionResult" description="Test ActionResult" roles="*" />     <!-- Does not work -->
  <siteMapNode url="http://www.google.com/" title="Test ActionResult" description="Test   ActionResult" roles="*" target="_blank"/>  <!-- Works -->
</siteMapNode> 

применимый результат действия контроллерафрагмент:

public ActionResult TestActionResult()
{
  ...
} 

применимый фрагмент маршрута:

routes.MapRoute(
  "TestActionResult", 
  "TestActionResult", 
  new { controller = "Home", action = "TestActionResult", area = "" }, 
  new string[] { "Namespace.Controllers" }
);

единственная ошибка, которую я получаю, - это обнаружение бесполезной ошибки: не найден ресурс.

EG:

Ошибка сервера в приложении '/'.

Ресурс не найден.Описание: HTTP 404. Ресурс, который вы ищете (или одна из его зависимостей), мог быть удален, изменилось его имя или временно недоступен.Пожалуйста, просмотрите следующий URL и убедитесь, что он написан правильно.

Запрошенный URL: / Home / TestActionResult


Информация о версии: Microsoft .NET Framework Версия: 4.0.30319;ASP.NET версия: 4.0.30319.225

предложения?

заранее спасибо.

1 Ответ

0 голосов
/ 04 августа 2011

Измените свой маршрут, чтобы он соответствовал URL, который он не может найти (т. Е. TestActionResult -> Home / TestActionResult):

routes.MapRoute(
  "TestActionResult", 
  "Home/TestActionResult", 
  new { controller = "Home", action = "TestActionResult" }
);

или, если вы хотите сопоставить различные действия в Home Controller, настройте ваш маршрут следующим образом:

routes.MapRoute(
      "HomeActions", 
      "Home/{action}", 
      new { controller = "Home", action = "TestActionResult" }
    );

Теперь /Home/TestActionResult перейдет к действию TestActionResult Home Controller, а /Home/Test перейдет к действию Test Home контроллера.

...