ASP. NET MVC - сохранить ссылки на папку root - PullRequest
0 голосов
/ 15 апреля 2020

Я пытаюсь создать ссылку внутри той же папки, у меня следующая структура

/Home/Index
/Home/About
/Home/Contact

Когда я запускаю веб-страницу, я связываюсь с Index, поэтому я получаю веб-страницу на экране: www.example.com.

Теперь я хотел бы перейти на другую страницу, чтобы я получил: www.example.com/Contact.html (или даже лучше, я хотел бы получить www.example.com/Contact), однако я получаю www.example.com/Home/Contact.

Я использую это как ссылку для действия:

<li class="pure-menu-item pure-menu-selected">@Html.ActionLink("Contact us", "Contact", "Home")</li>

Это мой маршрут:

routes.MapRoute(
    name: "Default",
    url: "{controller}/{action}/{id}",
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);

Что я могу изменить, чтобы получить желаемый результат?

Ответы [ 2 ]

1 голос
/ 16 апреля 2020

Украсьте действие Contact с помощью атрибута RouteAttribute и передайте ему требуемый маршрут в качестве параметра (т. Е. «Контакт»)

Edit

Вот пример HomeController с использованием RouteAttribute :

public class HomeController
     : Controller
{

      public IActionResult Home()
      {
          return this.View();
      }

      [Route("Contact")]
      public IActionResult Contact()
      {
          return this.View();
      }

}

Обратите внимание, что вы также можете использовать атрибут RouteAttribute на контроллерах. Например, если я добавлю атрибут Route ("Test") на HomeController, все действия моих контроллеров будут выглядеть так: "/Test/[ActionRoute]".

В вашем Представления, вы можете использовать следующий синтаксис вместо старого помощника тега @ Html .ActionLink:

<li class="pure-menu-item pure-menu-selected">
    <a asp-controller="Home" asp-action="Contact">Contact Us</a>
</li>

По моему мнению, эти помощники тегов атрибутов более чистые и дружественные html;)

0 голосов
/ 16 апреля 2020

Я смог исправить это с хорошим чтением и поиском, и вот что я придумал:

Я добавил это в routeConfig для каждой ссылки на html страницу:

 routes.MapRoute("Index", "Index", new { controller = "Home", action = "Index" });
 routes.MapRoute("About", "About", new { controller = "Home", action = "About" });
 routes.MapRoute("Contact", "Contact", new { controller = "Home", action = "Contact" });

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

 <li class="pure-menu-item">@Html.RouteLink("About us", "About")</li>

, это дает желаемый результат: www.example.com/About

...