Чистый способ включить HTML в проекты Script # - PullRequest
2 голосов
/ 02 мая 2011

Есть ли способ встраивания html-файла в проект script #, чтобы его можно было включить в элементы управления вместо того, чтобы помещать его в свойство / поле класса?

Когда я говорю html-файл,Я ссылаюсь на небольшие фрагменты HTML, которые я хочу использовать в элементах управления, а не на полноразмерные HTML-документы, которые лучше размещать в реальном веб-проекте.

У меня есть хакерский способ сделать это, создав.html-файл, который на самом деле является cs-файлом, который настроен на компиляцию и содержит необходимые объявления пространств имен / классов, со свойством с именем template, в котором содержится html.Visual Studio вроде бы с этим мирится, но это неуклюже, например, это означает, что вы должны использовать одинарные кавычки вместо двойных кавычек в атрибутах и ​​т. Д.

Некоторые другие вещи, на которые я смотрел, но нене совсем подходит для того, что мне нужно:

  • jquery templating.
  • включая файл в моем веб-проекте и загружая его через ajax при необходимости.

Было бы замечательно, если бы вы могли встраивать html-файл в проект в качестве ресурса и сделать так, чтобы скрипт # компилятор предоставил его через ResourceManager.GetString () или аналогично.

Любые предложения об альтернативных способах сделать это?

Спасибо

Ответы [ 2 ]

1 голос
/ 04 мая 2011

В списке проблем Script # идет хорошая дискуссия:

https://github.com/NikhilK/scriptsharp/issues/30

Пока я остановился на шаблоне T4, который генерирует мой код для меня:

<#@ template debug="false" hostspecific="true" language="C#" #>
<#@ output extension=".cs" #>

<#@ import namespace="System" #>
<#@ import namespace="System.Text" #>
<#@ import namespace="System.IO" #>

<#
 var namespaceName = System.Runtime.Remoting.Messaging.CallContext.LogicalGetData("NamespaceHint");
 var baseDir = System.IO.Path.GetDirectoryName(Host.TemplateFile);
#>

namespace <#= namespaceName #> {
<#= Run(baseDir) #>
}

<#+ 

    private string Run(string baseDir) {
      StringBuilder output = new StringBuilder();
      ProcessDirectory(baseDir, output);
      return output.ToString();
    }

    private void ProcessDirectory(string directoryPath, StringBuilder sb) {

      string[] files = Directory.GetFiles(directoryPath, "*.htm");

      string template = @"
  public partial class {1} {{
    public string Template = @""{2}"";
  }}
";

      foreach (var file in files) {

        string theNameSpace = "TheNamespace";
        string className = Path.GetFileNameWithoutExtension(file);

        var text = File.ReadAllText(file).Replace("\"", "\"\"");
        sb.AppendLine(string.Format(template, theNameSpace, className, text));

      }

      var directories = Directory.GetDirectories(directoryPath);

      foreach (var directory in directories) {
        ProcessDirectory(directory, sb);
      }

    }

#>
0 голосов
/ 02 мая 2011

Мне бы очень хотелось услышать, почему шаблоны не работают ... Хорошая вещь в шаблонном подходе заключается в том, чтобы сохранить разделение между кодом / логикой и пользовательским интерфейсом.

Тем не менее, вы можете попытаться создатьresx со строкой, содержащей ваш HTML, и измените генератор / пользовательский инструмент, связанный с resx, на ResXInternalScriptGenerator - это сгенерирует класс ресурсов, который вы можете использовать в скрипте # project.Лично я не думаю, что подход resx настолько удобен для создания фрагментов HTML.Если бы мне пришлось встраивать код, а не использовать шаблоны, я бы просто делал это в c # ... если только в HTML не было элемента локализации.

Надеюсь, это поможет.

...