2017-04-24 6 views
0

単純なHTML文字列からViewResultを構築する方法が見つかりません。私は単純なものからもっと精巧なものまで多くのソリューションを試しましたが、私はいつもプロセスのマスターページ/レイアウトを失うようです。ここでマスターページを失うことなく、文字列からMVC ViewResultをレンダリングする

は、私がここに特別な何もしない明らかにするので、機能するソリューションです:

public class MyActionResult : ViewResult 
{ 
    public MyActionResult(controller controller, object model) 
    { 
     this.ViewName = "MyView"; 
     this.ViewData.Model = model; 
    } 

    public override void ExecuteResult(ControllerContext context) 
    { 
     base.ExecuteResult(context); 
    } 

} 

ばかりアクションからビュー(「MYVIEW」、モデル)を呼び出すことに等しい。この作業の結果から、 、私はに行きました:

public class MyActionResult : ViewResult 
{ 
    public MyActionResult(GenericController controller, object model) 
    { 
     this.View = new MyView(controller, model); 
    } 

    public override void ExecuteResult(ControllerContext context) 
    { 

     base.ExecuteResult(context); 
    } 

} 

public class MyView : IView 
{ 
    public MyView(GenericController controller, object model) 
    { 
    } 

    public void Render(ViewContext viewContext, TextWriter writer) 
    { 
     writer.Write("TEST"); 
    } 
} 

まだ動作しますが、もはや(マスターページ/レイアウト)、単純なTESTです。だから間違った医者は何ですか?

編集: 私は私の目的をより具体的にする必要があるように感じます。私はすべてのMVCプロジェクトの中でコピーしなければならない約10のcshtmlページを持っています。なぜならそれらはすべてのMVCプロジェクトで使用されているからです。私は私のhtmlを構築するためにMvcHtmlStringsと連携これらの拡張メソッドで

@Html.MvcSharedMenu() 

、私はこれらの私の「カスタムコントロール」と呼ぶことができると思います。これらのページは、同じようHtmlHelperの拡張機能を使用してちょうど1メソッドの呼び出しで満たされています。私はRazor Generatorについて知っていますが、特にすべてのコードが既にViewの外にある場合は、その解決策を避けたいと思います。

+0

"マスターページ"は、ASP.NET Webフォーム、およびある程度はASP.NET MVC用の(レガシー)ASPXビューエンジンにのみ適用されます。ASP.NET MVCには存在しません。 Razorは、ASPXのMasterページとは若干異なる「レイアウト」と呼ばれる、同様の(しかしより柔軟な)システムを持っています。あなたの質問を明確にしてください。 – Dai

+0

"master page"は間違った言葉ですが、彼がそれを見せていてそれが消えてしまったら、彼がレイアウトを使っていると言っても間違いありません。 –

+0

実際には私は同意しません.MicrosoftはMVC MSDNのドキュメントでView()を返すときに、その名前がセマンティクスとは異なる議論になるかどうかをマスターページとして参照します。 Microsoft Manual of Styleをお読みになっている場合は、マニュアルをマスターページと呼びますので、必要に応じてそれを呼び出すことができます。https://msdn.microsoft.com/en -us/library/system.web.mvc.controller.view(v = 117).aspx#M:System.Web.Mvc.Controller.View%28System.String、System.String、System.Object%29 –

答えて

0

編集を読んだ後、おそらくあなたがしたいことはこれです:.cshtmlファイルを作成することからあなたを保つ、それはそれらの10を作成することからあなたを保持しません

return View("~/pathToYourView/View.cshtml", yourViewModel); 

。それぞれのモデルが文字列の場合、すべてのコントローラメソッドは同じビューを共有できます。

+0

私はまだ私のすべてのプロジェクトの中でcshtmlをコピーするか、何らかの種類の共有プロジェクト/フォルダーを使用してポイントする必要があります。それ以外の方法がない場合は、Razor Generatorを使用してみます。 – Glopper

関連する問題