C# 铸造<;文本>;串?

C# 铸造<;文本>;串?,c#,razor,C#,Razor,我本质上想从Razor/cshtml视图内部向函数传递一个多行字符串 我希望我能用来完成这项工作 以下是我正在尝试的: @Js.Tsc(@<text> class Greeter { greeting: string; constructor (message: string) { this.greeting = message; } greet() { return "Hello, " + this.g

我本质上想从Razor/cshtml视图内部向函数传递一个多行字符串

我希望我能用
来完成这项工作

以下是我正在尝试的:

        @Js.Tsc(@<text>
class Greeter {
    greeting: string;
    constructor (message: string) {
        this.greeting = message;
    }
    greet() {
        return "Hello, " + this.greeting;
    }
}   

var greeter = new Greeter("world");

var button = document.createElement('button')
button.innerText = "Say Hello"
button.onclick = function() {
    alert(greeter.greet())
}

document.body.appendChild(button)
        </text>.ToString())
@Js.Tsc(@
迎宾员{
问候语:字符串;
构造函数(消息:string){
this.greeting=消息;
}
问候{
返回“Hello”+this.greeting;
}
}   
var greeter=新的问候者(“世界”);
var button=document.createElement('按钮')
button.innerText=“打招呼”
button.onclick=函数(){
警报(greeter.greet())
}
document.body.appendChild(按钮)
.ToString())
但我还是会

编译器错误消息:CS1660:无法将lambda表达式转换为类型“string”,因为它不是委托类型

@Js.Tsc(@
行中

我以为
.ToString()
会正确地强制转换它。有什么方法可以做到这一点吗

我知道我可以使用
@“
-样式字符串,但这使得在两者之间编写代码更加复杂。

Razor仍然是C#代码,因此我认为您可以像传递任何其他字符串参数一样传递脚本。但是您必须转义任何特殊字符,例如双引号。我认为您不需要
@


@Js.Tsc
--我想我看到了这一点:-pYes..我在最后一句话中对此进行了评论。我希望避免必须转义我的Js中的所有引号。你能将脚本拆分为一个单独的文件,然后将StreamReader传递给函数而不是字符串吗?这样可以保存转义任务,但你将被迫接受更多的strict development protocol.Nope。这完全违背了我在这里尝试的目的。如果我将脚本放在一个单独的文件中,我只会通过普通的typescript处理程序运行它。我想从我正在使用的视图中混合一些C变量,如果它是一个单独的脚本文件,我就不能这样做。我不是在提倡这一点,只是在尝试要找到适合您的答案,但您可以提出一个令牌替换约定(类似于string.Format),从磁盘或URI读取文件,并将替换的字符串传递给Tsc()方法。你的意思是在我的C#vars中进行sub?如果我要走这条路线,我可能会想向脚本请求添加一些查询参数,例如,
/myspecialscript.ts?var1=a&var2=b
,然后创建一个特殊的请求处理程序来处理文件。
@Js.Tsc("class Greeter {
    greeting: string;
    constructor (message: string) {
        this.greeting = message;
    }
    greet() {
        return \"Hello, \" + this.greeting;
    }
}   

var greeter = new Greeter(\"world\");

var button = document.createElement('button')
button.innerText = \"Say Hello\"
button.onclick = function() {
    alert(greeter.greet())
}

document.body.appendChild(button);")