2011-05-07 139 views
0

在下面的代碼中,我在我的控制器中構建了一個字符串。在這個字符串中,我使用單引號字符。我需要在渲染之前保護這個角色。首先,我嘗試類似L'affaire但它不起作用(因爲引號字符已在我的幫手中使用,請參閱下文)。我成功與L &#3 9; affaire(轉義字符單引號,沒有空格),但也許有更好的方式來進行?轉義單引號字符

在我的控制,我準備像這樣的字符串:

 var builderAnchor = new TagBuilder("a"); 
     builderAnchor.MergeAttribute("href", "#"); 
     builderAnchor.InnerHtml = "Annuler"; 

     var builderText = new StringBuilder(); 
     builderText.Append("L'affaire " + affaire.IdAffaire + " a été supprimée. "); 
     builderText.Append(builderAnchor); 

     sessionWrapper.Notification = new HtmlString(builderText.ToString()); 

接下來,我已經從一個觀點叫助手這樣的:

public static IHtmlString ShowNotification(this HtmlHelper helper) 
    { 
     //... 
     returnedValue = "yellowNotification('" + helper.Encode(sessionWrapper.Notification) + "')"; 


     return new HtmlString(returnedValue); 
    } 

最後,所有的這些東西產生HTML如下:

yellowNotification('L'affaire 12345 a été supprimée'); 

無論如何感謝。

回答

0

我會建議你使用JavaScriptSerializer類:

public static IHtmlString ShowNotification(this HtmlHelper helper) 
{ 
    //... 
    var serializer = new JavaScriptSerializer(); 
    var value = serializer.Serialize(sessionWrapper.Notification); 
    returnedValue = string.Format("yellowNotification({0})", value); 
    return new HtmlString(returnedValue); 
} 

這將確保無論通知字符串包含將被正確地傳遞給yellowNotification功能什麼字。

另外我不太明白你已經顯示的第一個代碼片段與第二個代碼片段的關係是什麼,但是可以肯定的是這樣的代碼在控制器中沒有位置。

+0

我把這段代碼放在一個動作控制器中,因爲它是一個刪除操作,其中的事件被刪除並且生成通知。此通知將在下一個視圖顯示時顯示。這與Gmail的情況相同:您可以在Gmail中刪除郵件,並且在刪除之後,通知會顯示在頁面的頂部。你明白我的意思嗎?我想我必須在我的刪除操作控制器中管理這種東西... – Bronzato 2011-05-07 14:08:08

+0

@Bronzato我明白你的意思,但處理HTML不是控制器的責任。他的職責是刪除該項目,並向視圖發送可能包含此項目標識的視圖模型。這個視圖的責任是格式化和顯示通知(也許通過使用HTML助手或其他)。 – 2011-05-07 14:11:20

+0

你是絕對正確的。我以這種方式重構我的控制器和視圖。非常感謝您的幫助。 – Bronzato 2011-05-07 15:11:25