2013-10-17 45 views
3

在我的MVC視圖時遇到了下面的一段代碼MVC - 處理未結束的字符串字面新線

<script type="text/javascript"> 
@foreach (var item in Model.Test) 
{ 
<text> jsFunction(@item.someValue); </text> 
} 
</script> 

我在哪裏根據數據,我從模型中獲取動態調用JavaScript功能。

,例如在運行時它是基於模型數據

jsFunction("Works Fine"); 
jsFunction("works Fine"); 

哪個正確調用我的javascript功能

但是,在一個新的生產線得到的情況下,「未結束的字符串文字」呈現如下圖所示因爲新線

jsFunction("not working 
with new line"); 

什麼是處理這種情況的最佳方式

感謝

回答

7

什麼是處理這種情況

使用JSON序列化,這將確保價值傳遞給您的JavaScript功能最好的辦法就是正確地轉義:

<script type="text/javascript"> 
@foreach (var item in Model.Test) 
{ 
    <text>jsFunction(@Html.Raw(Json.Encode(item.someValue)));</text> 
} 
</script> 

,或者如果您更新你的jsFunction採取一個陣列,而不是一個單一的項目,你可以做到這一點:

<script type="text/javascript"> 
    var values = @Html.Raw(Json.Encode(Model.Test)); 
    jsFunction(values); 
</script> 

,然後循環通過將傳遞給你的函數的正常的JavaScript數組。

P.S:不要擔心,如果Razor Intellisense在這段代碼周圍擺出紅色的曲線。 Razor視圖中的Visual Studio Intellisense無法正常工作。只要忽略警告並運行你的應用程序,並觀察正確生成的代碼。

+0

HTML.Raw()將「」添加到我在顯示在UI中的HTML中。我如何避免這種情況!謝謝 – user2067567

+0

Json.Encode返回「quote」。我如何避免在屏幕上顯示? – user2067567

+0

你知道嗎。你搖滾。你的P.S:是我的錯。謝謝@Darin :) – user2067567

2

簡單的方法是創建一個幫助或東西:

@* declared at top of razor page *@ 
@helper jsFunction(String str) 
{ 
    str = (str ?? String.Empty).Trim().Replace(Environment.NewLine, "\\n"); 
    @:jsFunction("@Html.Raw(str)"); 
} 

@* example usage *@ 
foreach (var item in Model.Test) 
{ 
    @jsFunction(@item.Comment) 
} 

這將在字符串進行消毒,使之轉化\n到JavaScript計數器部分\\n。您也可以包括引號(轉"\"等)是例外

更好替代方案是,雖然使用類似JSON.NET:

<text>jsFunction(@Html.Raw(JsonConvert.Serialize(@item.Comment)))</text> 

這將使它完全可以放心JavaScript(併爲你處理例外)。

+0

HTML.Raw()將「」添加到我在顯示在UI中的HTML中。我如何避免這種情況!謝謝 – user2067567

+0

@ user2067567:在哪個電話?幫助器方法還是JsonConvert? –

+0

JSON導致發送到UI的Quot! – user2067567

1

試試這個

jsFunction(@Html.Raw(Json.Encode(item.Comment))) 

我想這應該解決您的問題。

+0

不,這不會解決問題。 –

+0

是的你只是忘記把Json.Encode放在物品上 –