2011-05-02 75 views
2

有沒有在腳本#項目中嵌入html文件的方法,以便它可以包含在控件中,而不必將其放入類屬性/字段中?在腳本#項目中包含HTML的簡潔方法

當我說html文件時,我指的是我想在控件中使用的小片段html,而不是實際web項目中放置的全尺寸html文檔。

我有一個hacky的方式做到這一點,創建一個.html文件,這是一個真正的cs文件,它被設置爲編譯並具有必要的名稱空間/類聲明,其中包含一個名爲模板的屬性,然後將html它。 Visual Studio提供了它,但它很笨拙,例如,這意味着你必須使用單引號而不是雙引號對屬性,等等。

我看過的一些其他東西,但並不完全適合我後:

  • jquery模板。
  • 將文件包含在我的web項目中,並在需要時通過ajax加載它。

如果您可以將HTML文件作爲資源嵌入到項目中,並讓腳本#編譯器通過ResourceManager.GetString()或類似方法提供它,那就太好了。

有關替代方法的任何建議嗎?

感謝

+0

我一直在做同樣的事情。即使發佈了源代碼,因爲我已經熟練地瞭解瞭如何封裝html片段。我仍然最終依靠.html作爲C#技巧,但我已經開發了一些其他代碼,您可能會覺得有用。 https://github.com/duckmaestro/Sharp-UI – DuckMaestro 2011-05-02 21:59:40

+0

我已經發布了一個功能請求:https://github.com/NikhilK/scriptsharp/issues/30。 – DuckMaestro 2011-05-02 22:34:21

+0

我的方法直接來自查看您的示例代碼(這是一個偉大的想法順便說一句),我剛剛忘記了我在哪裏看過它。我將看看github功能請求討論。 – juye 2011-05-03 16:38:52

回答

1

有一個很好的discusssion在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

你如何在腳本清晰和asp.net mvc項目的情況下使用它? – 2011-10-15 09:07:43

0

我很想聽聽爲什麼模板不工作......有關模板方法的好處是保持代碼/邏輯和UI之間的距離。也就是說,你可以嘗試用一個包含你的HTML的字符串創建一個resx,並將與resx相關的生成器/定製工具改爲ResXInternalScriptGenerator--這將生成一個你可以在腳本#項目中使用的資源類。我個人認爲resx方法不適合創作HTML塊。如果我不得不嵌入代碼而不是使用模板,我只需要在c#中執行它......除非HTML中還有一個本地化元素。

希望有所幫助。

+0

重新模板。很高興能夠創建一個表示小部件的js對象,並且構造函數可以從庫中創建自己的一個實例,包括它的html。它現在很好地工作,通過將擴展名設置爲.html的cs文件中的小部件html添加到vs顏色代碼中,但如果它可能只是一個常規的html文件,它會很好。我還沒有將這個庫提供給其他項目,但這可能是將html包含在腳本庫而不是Web項目中的另一個原因。 – juye 2011-05-02 16:52:52

+0

你在ResXInternalScriptGenerator上失去了我。我嘗試了你所描述的,但我得到以下錯誤:「無法在此係統上找到自定義工具」ResXInternalScriptGenerator「 – juye 2011-05-02 16:56:18

+0

糟糕 - 它應該是:ScriptSharp.ResourceModel.ResXInternalScriptGenerator – 2011-05-03 01:01:38