2011-12-12 67 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'的属性,它处理视图的转义。