Javascript,剃刀和逃逸字符。像撇号
我在我的MVC3项目中使用Razor。而且我正在使用FullCalendar JQuery插件。所以当我尝试填充阵列时,它的效果很好。除了一件事。如果s.Name包含撇号它呈现像'
这不是我想要的。我试图使用不同的方法,如编码和解码,甚至MvcHtmlString.Create和结果总是相同的。Javascript,剃刀和逃逸字符。像撇号
这里是代码片段:
<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>
更适合多行输出。
你说你已经尝试过MvcHtmlString.Create,但对我来说,这似乎为我正常工作:
'Trying @MvcHtmlString.Create("Testing'`")'
。
更新:
我把你的代码'
,把它放在浏览器,复制他们的表现在那里,把它放回在Visual Studio中,如:
@MvcHtmlString.Create("'")
而且它的工作,我只收到'
,而不是'
。
。
更新2:
这也适用于:
@{ViewBag.Symbol = "'";}
@MvcHtmlString.Create(ViewBag.Symbol)
尝试这样的:
$(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
的常见说法g it:使用ViewBag
是不好的做法,我建议你在视图模型中使用强类型视图。
哇...哇...这很有趣...你能告诉我如何结构(ViewBag.Session)应该看起来?我还没有很好的JavaScript,但我不知道类似的结构将如何在c#中看起来像。对不起 – Agzam 2011-03-07 23:03:41
@Agzam,我强烈建议你不要在控制器动作中使用'ViewBag'。但是如果你坚持'ViewBag.Sessions'应该是一个'IEnumerable
如果字符串包含' '?:( – 2015-06-02 14:09:53
这里是如何做到这一点:
title: '@Html.Raw(HttpUtility.JavaScriptStringEncode(s.Name))'
非常好。这是要走的路。 – 2013-09-23 16:00:27
当使用'@ Html.Raw(HttpUtility.JavaScriptStringEncode(Resources.MyFile .ResourceName))''带有包含HTML的文本作为翻译可能包含撇号等 – lko 2013-10-25 07:05:56
这不正确的顺序吗?我们想先解码html,然后编码e javascript字符串。 – 2014-08-05 02:39:22
实际上工作!除了我需要把标题变成双引号,并禁止在Sessions的名字中使用它们 – Agzam 2011-03-08 16:19:22
这并不能逃脱撇号? – 2013-04-23 07:38:20
Danny,请参阅我的转义/编码答案。 – Fabrice 2013-09-18 21:12:03