2012-03-14 16 views
7

Używam mustache.js na kliencie i Nustache w projekcie ASP.NET MVC3.Udostępnianie szablonów wąsy/nustache między serwerem a klientem. ASP.NET MVC

mam Person.mustache szablon w widoku folderu na serwerze, którego używam tak:

@Html.Partial("Person") 

od Razor widoku głównym (Index.cshtml).

Ale jak mogę przenieść to do klienta? Przeglądarka nie ma dostępu do folderu Widoki, aby uzyskać surową zawartość szablonu. W jakiś sposób muszę mieć sposób dołączania, aby wyprowadzać na stronie tekst HTML szablonu Person.mustache. Jeśli wymagam tego z widoku Razor, kompiluje go, ponieważ jest to normalny silnik szablonowy serwera.

Proszę, ktoś może dać jakieś pomysły? Dzięki.

Odpowiedz

3

Cóż, `ve zrobił coś, co działa, może ktoś wymyśli lepsze rozwiązanie. Oto ona:

Extenstion dla @Html pomocnika:

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); 

    } 
} 

A w głównym widoku Razor na stronie Indeks

@using MyProject.Helpers; 

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

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

</script> 
1

Prawdopodobnie będziesz chciał odsłonić nowego kontrolera, który może zwrócić treść częściowego widoku. Np:

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

Z tym, a trasa:

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

można następnie połączyć się z klientem (w tym przykładzie używam jQuery):

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

Nie można tego zmusić do pracy. W jakim obszarze nazw znajduje się klasa "Częściowa"? Znalazłem tylko "PartialView", ale kompiluje szablon z danym modelem – Roman

+0

Dzięki za edycję. Ale PartialView "Tworzy obiekt PartialViewResult, który renderuje częściowy widok" - z http://msdn.microsoft.com/en-en/library/system.web.mvc.controller.partialview.aspx, gdy potrzebuję surowej zawartości szablonu ze wszystkimi tymi {{}} symbolami – Roman

0

Nazwa pliku Person.mustache.cshtml, aw Index.cshtml:

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

Nie trzeba pisać pomocnika, aby doręczyć plik, gdy struktura robi to r ty.

+0

Przy takim podejściu nie byłbym w stanie użyć Person.mustache jako szablonu serwera, jeśli zmienię go tak jak to – Roman

Powiązane problemy