将TypeScript与内联服务器端`<script>`块和ASP.Net </script>一起使用

时间:2012-11-21 15:49:57

标签: c# asp.net server-side typescript

我希望能够在页面编译时转换为Javascript的ASPX(或Razor)页面中使用内联TypeScript。

所以:

<script type="text/typescript" runat="server">
    ...
</script>

...变为

<script type="text/javascript">
    ...
</script>

它应该在转换@<% %>块的同一点发生。

这应该可以在运行时使用某种页面后处理,但是在编译时不会产生异常 - 我想在脚本中找到与任何C#代码同时出错的错误。

理想情况下,TypeScript intellisense等应该在内联<script>块中工作,这使我认为这应该是VS2012扩展。

有没有办法做到这一点?

4 个答案:

答案 0 :(得分:5)

简短的回答是否定的。

您可以编写一个TypeScript文件并粘贴已编译的JavaScript,但这样就可以了。一个实际问题是,如果编译器将您的TypeScript转换为JavaScript,您将丢失TypeScript代码。这就是你有一个TypeScript文件和一个JavaScript文件的原因。

将脚本内联而不是引用外部脚本的令人信服的理由是什么?或许还有另一种不需要内联脚本的问题解决方案?

答案 1 :(得分:3)

您可以创建一个服务器控件,在运行时编译代码并缓存它:

[DefaultProperty("Text")]  
[ToolboxData("<{0}:TypeScript runat=server></{0}:TypeScript>")]  
public class TypeScript : WebControl  
{  
    public string Text { get; set; }

    protected override void RenderContents(HtmlTextWriter output)  
    {  
        output.AddAttribute(HtmlTextWriterAttribute.Type, "text/javascript");  
        if (!string.IsNullOrEmpty(this.ID))
        {
            output.AddAttribute(HtmlTextWriterAttribute.Id, this.ID);  
        }
        output.RenderBeginTag("script");
        output.Write(CompileToJavaScript(Text));
        output.RenderEndTag();
    }

    private string CompileToJavaScript(string typeScript)
    {
        // TODO: Call tsc with the code, and return the result.
    }
} 

您可以使用JScript.NET编译tsc.js,如果您需要实现IO层,并清除一些JScript.Net(非JavaScript)语法错误。

答案 2 :(得分:2)

  • 有一个解决方法,我所做的是在脚本标签中声明razor所需的变量

    <script type="text/javascript">
    
    //Razor variables initialized here and declared in the TypescriptFile.ts file
    
    var url = "@Url.Action("NewRequest", "Request")";
    
    </script>
    
  • 接下来在Typescript文件中声明url变量

    //TypescriptFile.ts
    declare var url: string;
    alert(url);
    
  • 使用它

  • 伤心地看到的Visual Studio 2013还没有提供服务器端支持。

答案 3 :(得分:0)

虽然它不是您问题的真正解决方案,但为什么不将{4}中的TypeScript代码保留在<script type="text/typescript">中并使用Typescript Compile在运行时编译?