2012-03-14 4 views
7

私はmustache.jsクライアントでを使用し、ASP.NET MVC3プロジェクトではNustacheを使用しています。レイザーメインビュー(Index.cshtml)からサーバーとクライアントの間の口頭/鼻テンプレートを共有します。 ASP.NET MVC

@Html.Partial("Person") 

は、私がこのように使用するサーバー上のViewフォルダ内のPerson.mustacheテンプレートを持っています。

しかし、どのようにクライアントに転送できますか?ブラウザにはViewsフォルダへのアクセス権がなく、テンプレートの生の内容を取得できます。どうにかして、私はPerson.mustacheテンプレートのHTML生のテキストをサーバーに出力する方法を含める必要があります。私はRazorのビューからそれを必要とするなら、通常のサーバテンプレートエンジンなので、コンパイルします。

誰にでもアイデアを教えてください。ありがとう。

答えて

3

まあ、I誰かがより良い解決策を思いつくだろう。ここでは、次のとおりです。@htmlヘルパーのための

Extenstion:

public static class ViewExtensions 
{ 
    public static IHtmlString RenderRawContent(this HtmlHelper helper, string serverPath) 
    { 
     string filePath = HttpContext.Current.Server.MapPath(serverPath); 

     //load from file 
     StreamReader streamReader = File.OpenText(filePath); 
     string markup = streamReader.ReadToEnd(); 
     streamReader.Close(); 

     return new HtmlString(markup); 

    } 
} 

かみそりメインビューのインデックスページの

@using MyProject.Helpers; 

<script type="text/template" id="person_template"> 

    @Html.RenderRawContent("~/Templates/Person.mustache") 

</script> 
1

部分ビューのコンテンツを返すことができる新しいコントローラを公開することをお勧めします。例えば:それと

public class TemplateController : Controller 
{ 
    public PartialViewResult Get(string name) 
    { 
    return PartialView(name); 
    } 
} 

、およびルート:

routes.MapRoute("Templates", "templates/{name}", 
    new { controller = "Template", action = "Get" }); 

が、私はその後、クライアントから呼び出すことができます(この例では、私はjQueryのを使用しています):

var model = { name: "Matt" }; 
$.ajax({ 
    url: "/templates/person", 
    success: function(r) { 
    var html = Mustache.render(r, model); 
    $("body").append(html); 
    } 
}); 
+0

これを動作させることはできません。名前空間 "Partial"クラスは何ですか?私は "PartialView"しか見つけられませんでしたが、与えられたモデルのテンプレートをコンパイルします – Roman

+0

ありがとうございました。しかし、PartialView "部分ビューをレンダリングするPartialViewResultオブジェクトを作成する" - http://msdn.microsoft.com/en-ja/library/system.web.mvc.controller.partialview.aspxから、テンプレートの生の内容が必要な場合すべての{{}}記号が付きます – Roman

0

名前のファイルPerson.mustache.cshtml、およびIndex.cshtmlに:

<script type="text/template" id="person_template"> 
    @Html.Partial("Person.mustache") 
<script type="text/template" id="person_template"> 

フレームワークがそれを行うときにファイルを提供するヘルパーを書く必要はありません。foあなた。

+0

このアプローチでは、Person.mustacheをサーバーテンプレートとして使用することはできません。このように名前を変更すると – Roman

関連する問題