2012-03-14 30 views
7

Tôi đang sử dụng mustache.js trên máy khách và Nustache trong dự án ASP.NET MVC3.Chia sẻ các mẫu bộ ria mép/nustache giữa máy chủ và máy khách. ASP.NET MVC

Tôi có Person.mustache mẫu trong một Xem thư mục trên máy chủ, mà tôi sử dụng như thế này:

@Html.Partial("Person") 

từ giao diện chính Razor (Index.cshtml).

Nhưng làm thế nào tôi có thể chuyển nó cho khách hàng? Trình duyệt không có quyền truy cập vào thư mục Chế độ xem để lấy nội dung thô của mẫu. Bằng cách nào đó tôi phải có một cách để bao gồm để xuất HTML văn bản thô của mẫu Person.mustache trên máy chủ. Nếu tôi yêu cầu nó từ xem Razor, nó biên dịch nó, vì nó là máy chủ mẫu máy chủ bình thường.

Mọi người có thể đưa ra bất kỳ ý tưởng nào không? Cảm ơn.

Trả lời

3

Vâng, tôi `đã làm một cái gì đó, mà làm việc, có lẽ ai đó sẽ đưa ra giải pháp tốt hơn. Ở đây là:

extenstion cho @Html helper:

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

    } 
} 

Và theo quan điểm chính Razor cho trang Index

@using MyProject.Helpers; 

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

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

</script> 
1

Bạn có thể muốn hiển thị bộ điều khiển mới có thể trả lại nội dung xem một phần của bạn. Ví dụ:

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

Với điều đó, và một tuyến đường:

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

Sau đó tôi có thể gọi từ khách hàng (trong ví dụ này tôi đang sử dụng jQuery):

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

Không thể làm việc này. Không gian tên "Một phần" lớp là gì? Tôi chỉ tìm thấy "PartialView", nhưng nó biên dịch mẫu với mẫu đã cho – Roman

+0

Cảm ơn bạn đã chỉnh sửa. Nhưng PartialView "Tạo ra một đối tượng PartialViewResult mà ám một phần xem" - từ http://msdn.microsoft.com/en-en/library/system.web.mvc.controller.partialview.aspx, khi tôi cần nội dung nguyên mẫu với tất cả {{}} biểu tượng – Roman

0

Tên file Person.mustache.cshtml, và trong Index.cshtml:

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

Không cần phải viết trình trợ giúp để phân phát tệp khi khung làm việc đó r bạn.

+0

Với cách tiếp cận đó, tôi sẽ không thể sử dụng Person.mustache làm mẫu máy chủ, nếu tôi đổi tên nó như thế này – Roman

Các vấn đề liên quan