Javascript,剃刀和逃生字符。 像撇号一样

我在我的MVC3项目中使用Razor。 而且我正在使用FullCalendar JQuery插件。 所以当我试图填充arrays它的作品很好。 除了一件事。 如果s.Name包含撇号,则会呈现像' 这不是我想要的。 我试图使用不同的方法,如编码和解码,甚至MvcHtmlString.Create和结果总是相同的。

这里是代码片段:

 <head> <script type='text/javascript'> $(document).ready(function () { $('#calendar').fullCalendar({ header: { left: '', center: 'title', right: 'month,agendaWeek,agendaDay' }, month: 5, year: 2011, editable: false, events: [ @foreach (var s in ViewBag.Sessions) { @:{ @: title: '@s.Name', @: start: new Date(@s.Starts.Year, @s.Starts.Month-1, @s.Starts.Day), @: end: new Date(@s.Ends.Year, @s.Ends.Month-1, @s.Ends.Day) @:}, } ] }); }); </script> 

我会写这样的foreach:

  @foreach (var s in ViewBag.Sessions) { <text> { title: '@Html.Raw(HttpUtility.JavaScriptStringEncode(s.Name))', start: new Date(@s.Starts.Year, @s.Starts.Month-1, @s.Starts.Day), end: new Date(@s.Ends.Year, @s.Ends.Month-1, @s.Ends.Day) }, </text> } 
  • Html.Raw跳过html转义。
  • 多行输出更适合<text>

这里是如何做到这一点:

 title: '@Html.Raw(HttpUtility.JavaScriptStringEncode(s.Name))' 

尝试像这样:

 $(function () { $('#calendar').fullCalendar({ header: { left: '', center: 'title', right: 'month,agendaWeek,agendaDay' }, month: 5, year: 2011, editable: false, events: @Html.Raw(new JavaScriptSerializer().Serialize(ViewBag.Sessions)) }); }); 

ViewBag.Sessions可能需要进行一些修改才能达到所需的结果(按属性名称),这使我可以看到有人使用ViewBag时对ViewBag的常见说法:使用ViewBag是不好的做法,我build议您使用用视图模型强types化视图。

你说你已经试过MvcHtmlString.Create,但对我来说,这似乎对我来说是正确的:

 'Trying @MvcHtmlString.Create("Testing'`")' 

更新:

我把你的代码&#39; ,把它放在浏览器中,把那里显示的内容复制到Visual Studio中,如下所示:

 @MvcHtmlString.Create("'") 

而且它确实有效,我只是回来了,而不是&#39;

更新2:

这也适用:

 @{ViewBag.Symbol = "'";} @MvcHtmlString.Create(ViewBag.Symbol)