2016-07-21 7 views
0

私はちょうど.NETで始まり、テストアプリケーションを構築しています。私は現在、DefaultControllerIndex()アクションメソッドを使用してホームページを設定しています。これは期待通りに機能し、ホームページはシンプルです。www.domain.comMVC ActionLinkのアドバイス

私はTerms()Privacy()アクションメソッドを使用して、同じDefaultControllerの下に2つの新しいページ(利用規約とプライバシー)を作成しました。

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'に入れて、あなたのヘルパーがアクションリンクを正しく見ているなら、別のコントローラは必要ありません –

+0

コントローラコードを投稿できますか? –

+0

上記のコントローラコードを追加しました。現在のところ、すべての基本は – Gavin5511

答えて

3

これらはHomeControllerにあった場合、私はあなたが同じ問題を抱えているだろうとは思いません。私は何がやりたいことは、URL内のコントローラ名を隠していると信じてい

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のルートだけをマップする方法はありますか? – Gavin5511

+0

@ Gavin5511デフォルトルーティングをそのままにして、最初にこれを定義することができます – ediblecode

+0

大丈夫です。あなたは私がこれを行う方法を示す答えを更新することができます。 – Gavin5511

1

:しかし、私はあなたがRouteConfigファイルを使用することによってこの問題を回避することができると思います。その場合は、あなたの質問はここで回答されています

ASP.NET MVC - Removing controller name from URL

私はこれが役に立てば幸い:)

0

あなたがエンドポイントに特定のルートを与える属性のルーティングを使用することができます。 routes.MapMvcAttributeRoutes();

@Url.Action()または@Html.ActionLinkで生成されたURLはdomain.com/privacyとdomain.com/termsとしてURLを生成する必要がありますあなたのRouteConfig.cs次のコード行でのルーティング属性を有効にする必要がありますで

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

関連する問題