Javascript, Razor and Escape characters. Like apostrophe
HttpUtility.JavaScriptStringEncode
is not really required here.
Simply
'@Html.Raw(s.Name)'
is worked for me.
Try like this:
$(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
might require some modifications to achieve the desired result (in terms of property names), which brings me to the usual remark I make about ViewBag
when I see someone using it: using ViewBag
is bad practice and I would recommend you using a strongly typed view with a view model.
I would write your foreach like this:
@foreach (var s in ViewBag.Sessions)
{
<text>
{
title: '@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>
}
HttpUtility.JavaScriptStringEncode
to escape quotes and html markup.<text>
is nicer for multiline output.
Here is how to do it:
title: '@Html.Raw(HttpUtility.JavaScriptStringEncode(s.Name))'