2012-12-26 43 views
2

我基本上想要從一個Razor/cshtml視圖內部將一個多行字符串傳遞給一個函數。鑄<text>來串?

我希望我可以用<text>來完成這個。

這裏就是我想:

 @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()) 

但我仍然得到

編譯器錯誤信息:CS1660:無法轉換lambda表達式到類型「串」,因爲它不是委託類型

@Js.Tsc(@<text>行。

我以爲.ToString()會投它。有沒有辦法做到這一點?

我知道我可以使用@"風格的字符串,但是這使得編寫代碼變得更加複雜。

+1

'@ Js.Tsc' - 我想我見[這裏](http://stackoverflow.com/q/14046203/1344760)這是怎麼回事:-P – RichardTowers

回答

1

Razor仍然是C#代碼,所以我想你會像其他任何字符串參數那樣傳遞腳本。但是你必須避開任何特殊字符,比如雙引號。我不認爲你需要@<text>

@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);") 
+0

是..我評論對在我的最後一句話中。我希望避免逃避JS中的所有引用。 – mpen

+0

您可以將腳本分割爲單獨的文件,然後將StreamReader傳遞給函數而不是字符串?這樣可以節省逃跑的任務,但是你會被迫採用更嚴格的開發協議。 – mgnoonan

+0

沒有。這徹底擊敗了我在這裏嘗試做的目的。如果我在一個單獨的文件中有我的腳本,我只是通過正常的腳本處理程序來運行它。我想在我工作的視圖中混入一些C#變量,如果它是一個單獨的腳本文件,我不能這樣做。 – mpen