Javascript, бритва и Escape-символы. Как Апостроф
Я использую бритву в моем проекте MVC3. А также я использую плагин FullCalendar JQuery. Поэтому, когда я пытаюсь заполнить массив, он работает хорошо. Кроме одного. Если s.Name содержит Апостроф он отображает как' это не то, что я хочу. Я пытался использовать различные методы, такие как кодирование и декодирование и даже MvcHtmlString.Создание и результат всегда один.
вот фрагмент кода:
<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>
4 ответов:
Я бы написал ваш 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>лучше для многострочного вывода.
попробуйте так:
$(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это плохая практика, и я бы рекомендовал вам использовать строго типизированное представление с моделью представления.
Вы сказали, что уже пробовали MvcHtmlString.Создать, но для меня это, кажется, работает правильно для меня:
'Trying @MvcHtmlString.Create("Testing'`")'.
обновление:
Я взял твой код
', поместите его в браузер, скопировал то, что там показано, верните его в Visual Studio, например:@MvcHtmlString.Create("'")и это сработало, я получил только
'назад, а не'..
обновление 2:
это работает:
@{ViewBag.Symbol = "'";} @MvcHtmlString.Create(ViewBag.Symbol)
Comments