2016-07-21 6 views
0

Я только начинаю с .NET и создаю тестовое приложение. В настоящее время у меня установлена ​​домашняя страница с использованием DefaultController и метода действия Index(). Это работает так, как ожидалось, и домашняя страница проста www.domain.com.MVC Рекомендации по ActionLink

Я создал 2 новых страницы (условия и конфиденциальность) под тем же DefaultController, используя Terms() и Privacy() методы действий.

Я хочу, чтобы иметь возможность просматривать их с помощью URL-адреса как www.domain.com/terms и www.domain.com/privacy.

Когда я использую <li>@Html.ActionLink("Terms of Service", "Terms", "Default")</li>, он работает, но он переносит меня по адресу URL: www.domain.com/Default/privacy.

Должен ли я создавать отдельные контроллеры для каждой из этих страниц, или я неправильно использую помощник @html.ActionLink? Раньше я использовал <li><a href="~/privacy">Privacy Policy</a></li>, но я понимаю, что это не лучшая практика?

Кроме того, есть ли способ заставить ссылки в качестве нижнего регистра?

My Controller Код:

public class DefaultController : Controller 
{ 
    public ActionResult Index() 
    { 
     return View(); 
    } 

    public ActionResult Terms() 
    { 
     return View(); 
    } 

    public ActionResult Privacy() 
    { 
     return View(); 
    } 
} 
+1

Вам не нужен другой контроллер, если вы помещаете эти страницы в 'DefaultController', и ваши помощники выглядят правильно для actionlink –

+0

, можете ли вы разместить свой код контроллера? –

+0

Добавили код контроллера выше. В настоящее время все очень просто – Gavin5511

ответ

3

Если бы они были в HomeController я не верю, что ты такая же проблема. Тем не менее, я думаю, вы можете обойти эту проблему с помощью файла RouteConfig:

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

routes.MapRoute(
    name: "Generic", 
    url: "{controller}/{Action}/{Id}", 
    defaults: new { Action = "Index", Id = UrlParameter.Optional } 
); 
+0

Я пробовал это, и он работает для моего примера выше, но затем он изменяет маршрутизацию для всех других контроллеров. Есть ли способ, которым я могу сопоставить маршрут JUST для DefaultController и ничего больше? – Gavin5511

+0

@ Gavin5511 вы можете оставить по умолчанию маршрутизацию, но сначала определите это – ediblecode

+0

Хорошо. любой шанс, что вы можете обновить свой ответ, чтобы показать, как я могу это сделать? – Gavin5511

1

Я считаю, что то, что вы хотите сделать, это скрыть имя контроллера в URL. Если это так, то ваш вопрос ответил здесь:

ASP.NET MVC - Removing controller name from URL

Я надеюсь, что это помогает :)

0

Вы можете использовать атрибут маршрутизации, чтобы дать определенные маршруты к конечным точкам.

[Route("terms")] 
public ActionResult Terms() 
{ 
    return View(); 
} 
[Route("privacy")] 
public ActionResult Privacy() 
{ 
    return View(); 
} 

В вашей RouteConfig.cs необходимо включить атрибут маршрутизации с помощью следующей строки кода: routes.MapMvcAttributeRoutes();

Теперь любые URLs, созданные с помощью @Url.Action() или @Html.ActionLink должны генерировать URLS как domain.com/privacy и domain.com/terms