2011-05-07 146 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