2012-03-14 88 views
7

我正在使用客戶端上的mustache.js和ASP.NET MVC3項目中的Nustache在服務器和客戶端之間共享小鬍子/ nustache模板。 ASP.NET MVC

我在服務器上一個視圖文件夾,我用這樣的Person.mustache模板:

@Html.Partial("Person") 

從剃刀主視圖(Index.cshtml)。

但是,我怎樣才能將它轉移到客戶端?瀏覽器無法訪問「視圖」文件夾以獲取模板的原始內容。不知何故,我必須有一種方法來包含在服務器上輸出Person.mustache模板的HTML原始文本。如果我從Razor視圖需要它,它會編譯它,因爲它是普通的服務器模板引擎。

請任何人都可以提供任何想法?謝謝。

回答

3

嗯,我已經做了一些事情,那可行,也許有人會想出更好的解決方案。那就是:

爲@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

不能讓這個工作。什麼名稱空間「部分」類在?我發現只有「PartialView」,但它用給定的模型編譯模板 – Roman 2012-03-14 17:23:42

+0

感謝您的編輯。但PartialView「創建一個呈現部分視圖的PartialViewResult對象」 - 來自http://msdn.microsoft.com/zh-cn/library/system.web.mvc.controller.partialview.aspx,當我需要模板的原始內容時與所有{{}}符號 – Roman 2012-03-16 10:01:36

0

文件命名爲Person.mustache.cshtml主視圖,並在Index.cshtml

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

當框架做到這一點時,不需要編寫一個幫助器來提供文件你呢。

+0

使用該方法我不能使用Person.mustache作爲服務器模板,如果我將它重命名爲這樣 – Roman 2012-05-19 04:53:33

相關問題