2012-04-03 9 views
0

私のプレーンなコンテンツの多くは、カスタムCMSによってアクセスされるデータベースにあります。MVC3カスタムActionResult

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

と私の見解::アプリケーションの周りに私は、コントローラのアクション(簡体)から構成されているなど、メッセージの「ありがとう」簡易表示

@Html.GetContent("DetailsUpdated") 

私はこれらのかなりの数を持っており、 1つのライナーで多くのビューファイルを持っているのはかなり面倒です。私はそのコンテンツをビューとして返すことができるようにしたいと考えています。return ContentResult(ContentRepository.GetContent("KEY"));が返されますが、これはプレーンテキストとして返され、レンダリングされたマスタービューはありません。

したがって、基本的にDBからContentRepository.GetContent("KEY")(文字列を返す)を介してコンテンツを取得し、それをRenderBody()が呼び出されるマスタービューに挿入します。

public ActionResult DetailsUpdated() 
{ 
    return DbContentResult(); 
} 

、その後DbContentResultのActionResultは、アクションやコントローラ名にコンテンツ鍵相対を見つけるのデータベースにアクセスし、コンテンツや表示を取得しますが:私はちょうど行うことができますので、私は、カスタムのActionResultを持っているしたいのですが物理的なファイルビューは必要ありません。これは可能ですか?

答えて

2

あなたは1つのビューファイルを持っているし、いくつかのアクションからそのビューファイルを参照することがあります。この場合

public class FooBarController : Controller { 

    public ViewResult Foo() { 

     return View("FooView", ContentRepository.GetContent("KEY")); 
    } 
} 

、あなたは、そのパス〜/ビュー/共有/ FooViewあるビューをレンダリングすることができるようになります.cshtml(もちろんデフォルトの規約を変更しない限り)。

編集:

あなたが示したように、あなたはあなたのためにこれを行うカスタムするViewResult行うことができます:書き込み、

public ActionResult Index() { 

    return new DbContentResult(); 
} 

あるいはさらに良い:

public class DbContentResult : ViewResult { 

    public DbContentResult() { 

     this.ViewName = "FooView"; 
     this.ViewData.Model = "Foo Model"; 
    } 
} 

使用上のDbContentResultと統合するControllerクラスの拡張メソッド:

public static class ControllerExtensions { 

    public static ViewResult DbContentResult(this Controller controller) { 

     return new DbContentResult(); 
    } 
} 

使用法:ここに行くのActionResultカスタムを作成する方法についての詳細について

public ActionResult Index() { 

    return this.DbContentResult(); 
} 
+0

うん良い答え。私は、情報のテーブル全体を表示するコントローラのアクションごとにいくつかのビューを再利用します。主に同じオブジェクトタイプを表示するので、コードは非常に似ています。微調整を行うことで、特に部分解析やif文を使って、alsortを再利用することができます。 – Doomsknight

+0

そのようにすることは決して考えられませんでしたが、それはうまくいくと思いますが、提案したようにそれを行う方法はありますか? – eth0

+0

@ eth0が答えを編集しました。見てみな。 – tugberk

-2
+0

ここで答えをStackOverflowで提供することは丁寧であると考えられます。この方法は、サイトがオフラインになったり、コンテンツがもはや利用できなくなった場合でも、今後の読者が利用できるようにします。 [質問への回答方法](http://stackoverflow.com/questions/how-to-answer)を参照してください。 –

関連する問題