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>


615   4  

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> лучше для многострочного вывода.

вот как это сделать:

title: '@Html.Raw(HttpUtility.JavaScriptStringEncode(s.Name))'

попробуйте так:

$(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'`")'

.

обновление:

Я взял твой код &#39;, поместите его в браузер, скопировал то, что там показано, верните его в Visual Studio, например:

@MvcHtmlString.Create("'")

и это сработало, я получил только ' назад, а не &#39;.

.

обновление 2:

это работает:

@{ViewBag.Symbol = "'";}
@MvcHtmlString.Create(ViewBag.Symbol)

Comments

    Ничего не найдено.