问题
I am using Razor in my MVC3 project. And also I'm using FullCalendar JQuery plugin. So when I'm trying to fill the array it works good. Except one thing. If s.Name contains apostrophe it renders like'
that's not what I want. I tried to use different methods like Encode and Decode and even MvcHtmlString.Create and result is always the same.
Here is the code snippet:
<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>
回答1:
I would write your foreach like this:
@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
to skip the html escaping.<text>
is nicer for multiline output.
回答2:
Here is how to do it:
title: '@Html.Raw(HttpUtility.JavaScriptStringEncode(s.Name))'
回答3:
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.
回答4:
You said you already tried MvcHtmlString.Create, but for me, this seems to work correctly for me:
'Trying @MvcHtmlString.Create("Testing'`")'
.
Update:
I took your code '
, put it in browser, copied what showed in there, put it back in Visual Studio, like:
@MvcHtmlString.Create("'")
And it did work, I only got '
back, not '
.
.
Update 2:
This also works:
@{ViewBag.Symbol = "'";}
@MvcHtmlString.Create(ViewBag.Symbol)
回答5:
HttpUtility.JavaScriptStringEncode
is not really required here.
Simply
'@Html.Raw(s.Name)'
is worked for me.
来源:https://stackoverflow.com/questions/5225796/javascript-razor-and-escape-characters-like-apostrophe