2012-01-03 5 views
6

これを1つのグループ結果に縮小する方法はありますか?私は静的コンテンツを単に返すこれらのようなページセットを持っており、それを行うより効率的な方法がなければならないと考えました。返品確認のためにこのコードを簡略化することはできますか?非常に冗長であるようです

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

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

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

はEDIT:すべての返信:)

+0

このコードは何ですか。 –

+0

これは、MicrosoftのASP.NET MVC3フレームワークのコントローラのコードです。 –

+3

改行を削除できます。 – SLaks

答えて

9

あなたはviewNameパラメータを取る共有アクションメソッドを作ることができてくれてありがとう:

public ActionResult Show(string viewName) 
{ 
    return View(viewName); 
} 

あなたはこのアクションへのルートそれらの名前をその後、次のことができます。

routes.MapRoute(
    "Simple Content", 
    "/{viewName}", 
    new { controller = "Something", action = "Show" }, 
    new { viewName = "Research|Facility|Contact" } 
); 

viewNameは、任意のURLに一致する経路です。

これは情報漏えいの脆弱性に注意してください。攻撃者は/ControllerName/Show?viewName=~/Views/Secret/Viewを要求できます。
モデルを使用しない機密ビューがある場合は、そのアクションのviewNameを検証する必要があります。
これを行うには、dknaack's answerのように列挙型を使用できます。

+4

あなたはそれに私を打つ。私はこれが実際にはそれほど直感的でスケーラビリティの低い方法だと思っています。私は個人的にはそれをそのまま残していました(OP)。 – LukeP

2

あなただけcontrollername/{path}を取ると新しいルートを作成することができ、そしてパスは、この

public ActionResult Page(string path) 
{ 
    return View(path); 
} 

のようなコントローラのアクション何かにそのように、このパス

yourdomain.com/controllername/Ijusttestに行くビューのあなたの名前になります~/Views/controllername/Ijusttest.cshtmlからビューを読み込みます。あなたは、あなたがルートからあなたに行動を呼び出すことを確認する必要があります。

私はそれが理にかなっていると思います。あなたは違った設定をすることができます。作成するルーティングまでです。ルートコードのヘルプが必要な場合は教えてください。あなたは1つのアクションを作成し、ページ名として引数を渡し、idは値が「研究」、「ファシリティ」を持つことができます

public StaticContent : Controller 
{ 
    public ActionResult Pages(string id) 
    { 
    return View(id); 
    } 
} 

例えばしたい場合があります

0

など

あなたはこれらの/ staticcontent/pages/researchのようなURLを取得します

たとえば、StaticContentフォルダのViews.cshtmlのビューに名前を付けます。

関連する問題