2016-07-21 66 views
0

我剛剛開始使用.NET,並且正在構建一個測試應用程序。我目前使用DefaultControllerIndex()操作方法設置了主頁。這按預期工作,並且首頁很簡單www.domain.com。MVC ActionLink建議

我已經在相同的DefaultController創建2個新的頁面(條款和隱私權),使用Terms()Privacy()操作方法。

我希望能夠瀏覽到這些與URL作爲www.domain.com/terms和www.domain.com/privacy。

當我使用<li>@Html.ActionLink("Terms of Service", "Terms", "Default")</li>它的工作原理,但它需要我在www.domain.com/Default/privacy的URL。

我應該創建這些頁面的獨立控制器,還是我使用@html.ActionLink助手不正確?我以前使用<li><a href="~/privacy">Privacy Policy</a></li>,但我知道這不是最佳做法?

另外,有沒有辦法強制鏈接爲小寫?

我的控制器代碼:

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

我試過這個,它對我上面的例子工作,但它然後改變所有其他控制器的路由。有沒有一種方法可以爲DefaultController映射路由JUST,而沒有其他的東西? – Gavin5511

+0

@ Gavin5511你可以離開默認路由,但首先定義這個 – ediblecode

+0

好吧。任何機會,你可以更新你的答案,以顯示我可以做到這一點? – Gavin5511

0

您可以使用屬性路由給出具體的路線終點。

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

在你RouteConfig.cs您必須啓用屬性與下面的代碼行路由:routes.MapMvcAttributeRoutes();

現在用@Url.Action()@Html.ActionLink產生的任何網址生成URL作爲domain.com/privacy和domain.com/terms