2011-12-12 31 views
6

我在item.Name中包含字符串「It's Tuesday!」。 爲了緩解javascript錯誤,在C#控制器中我已經逃脫了這個單引號。 在網頁上,它看起來像是「它是星期二!」。從MVC 3剃刀視圖變量轉義單引號

這至少可以防止任何javascript錯誤,但是,我不希望顯示的實際字符串包含已轉義的反斜槓。

一旦javascript錯誤已被照顧好,我該如何恢復轉義?這感覺像一個相當簡單的問題,但我對MVC 3有點不熟悉。任何提示都非常感謝!我的搜索沒有找到任何具體的例子。

的我在剃刀視圖代碼的示例:

@foreach (var item in Model) 
{ 
    @Html.DisplayFor(modelItem => item.Name) // item.Name = "It\'s Tuesday!" 
} 
+0

爲什麼當你的示例中沒有javascript存在時,爲什麼要避免引號字符「緩解javascript錯誤」? –

+0

這是真的,我的例子中沒有javascript。我的例子是一個非常基本的代碼片段,顯示瞭如何e字符串問題我想從剃刀視圖中顯示一個反斜槓。實際解決方案的頁面上當然有javascript。 –

+0

雖然我確定在你的頁面上有javascript,但它仍然對我來說毫無意義,爲什麼你試圖在一個字符串中轉義一個報價,這個字符串被打算作爲標籤的HTML呈現。我無法理解你爲什麼要逃避那裏。 –

回答

21

創建一個可以使用的擴展方法,或者直接編碼。我不認爲之前編碼得到它,除非你有你的視圖模型)沿着這些路線一個單獨的屬性意味着這個(不是一個壞主意(

這不是測試,但一些

 

public static class HtmlExtensions 

{ 
    public static IHtmlString JavaScriptEncode(this HtmlHelper html, string item) 
    { 
     return new HtmlString(HttpUtility.JavaScriptStringEncode(item)); 
    } 
} 
 

你然後只需從視圖中調用@ Html.JavaScriptEncode(yourProperty),或者只是引用您的編碼屬性名稱。

+0

這種方法效果很好,謝謝!我只是調用一個擴展方法,然後讓該方法刪除退格。雖然也許不是解決這個問題的最好方法,但它仍然可以避免使用Javascript。 –

10

可以用來再次防止輸出的編碼以下。然而,這確實依賴於你自己妥善處理它。

MVCHTMLString

@MvcHtmlString.Create(yourString) 
+0

我將此與擴展結合使用方法。謝謝你的文章!不幸的是,我只能將1個答案標記爲正確,並且由於名譽低下而無法贊成。不過值得讚賞的是,無論什麼是值得的! –

+0

而且我確實需要這種提升:-) – RubbleFord

0

我寧願讓我的看法啞巴。因此,我有一個名爲'Display'或'DisplayName'的屬性,它處理視圖的轉義。