J'utilise Razor dans mon projet MVC3. Et j'utilise également le plugin FullCalendar JQuery. Donc, quand j'essaie de remplir le tableau, cela fonctionne bien. Sauf une chose. Si s.Name contient une apostrophe, elle se présente comme'
ce n'est pas ce que je veux. J'ai essayé d'utiliser différentes méthodes comme Encode et Decode et même MvcHtmlString.Create et le résultat est toujours le même.
Voici l'extrait de code:
<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>
J'écrirais votre foreach comme ceci:
@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
pour ignorer l'échappement html.<text>
est plus agréable pour la sortie multiligne.Voici comment faire:
title: '@Html.Raw(HttpUtility.JavaScriptStringEncode(s.Name))'
Essayez comme ceci:
$(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
peut nécessiter quelques modifications pour obtenir le résultat souhaité (en termes de noms de propriété), ce qui m'amène à la remarque habituelle que je fais à propos de ViewBag
quand je vois quelqu'un l'utiliser: utiliser ViewBag
est mauvaise pratique et je vous recommande d'utiliser une vue fortement typée avec un modèle de vue.
Vous avez dit que vous avez déjà essayé MvcHtmlString.Create, mais pour moi, cela semble fonctionner correctement pour moi:
'Trying @MvcHtmlString.Create("Testing'`")'
.
Mise à jour:
J'ai pris ton code '
, mettez-le dans le navigateur, copiez ce qui y est affiché, remettez-le dans Visual Studio, comme:
@MvcHtmlString.Create("'")
Et cela a fonctionné, je n'ai eu que '
retour, pas '
.
.
Mise à jour 2:
Cela fonctionne également:
@{ViewBag.Symbol = "'";}
@MvcHtmlString.Create(ViewBag.Symbol)
HttpUtility.JavaScriptStringEncode
n'est pas vraiment requis ici. Simplement
'@Html.Raw(s.Name)'
est travaillé pour moi.