Совместное использование шаблонов с усами / серверами между сервером и клиентом.ASP.NET MVC - PullRequest
8 голосов
/ 14 марта 2012

Я использую mustache.js на клиенте и Nustache в проекте ASP.NET MVC3.

У меня есть Person.mustache шаблон в папке View на сервере, который я использую следующим образом:

@Html.Partial("Person")

с основного вида Razor (Index.cshtml).

Но как я могу передать его клиенту? Браузер не имеет доступа к папке Views для получения необработанного содержимого шаблона. Каким-то образом у меня должен быть способ включить вывод HTML-текста шаблона Person.mustache на сервер. Если мне это требуется из представления Razor, он компилирует его, поскольку это обычный механизм шаблонов сервера.

Пожалуйста, кто-нибудь может дать какие-нибудь идеи? Спасибо.

Ответы [ 3 ]

3 голосов
/ 16 марта 2012

Ну, я сделал что-то, что работает, может быть, кто-нибудь найдет лучшее решение.Вот оно:

Расширение для помощника @Html:

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

    }
}

И в главном представлении Razor для страницы индекса

@using MyProject.Helpers;

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

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

</script>
1 голос
/ 14 марта 2012

Скорее всего, вы захотите выставить новый контроллер, который может вернуть ваше частичное содержимое просмотра.Например:

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 голосов
/ 11 мая 2012

Назовите файл Person.mustache.cshtml, а в Index.cshtml:

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

Нет необходимости писать помощника для обслуживания файла, когда фреймворк сделает это за вас.

...