Javascript, Razor and Escape characters. Like apostrophe

59,748

Solution 1

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.

Solution 2

Here is how to do it:

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

Solution 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.

Solution 4

HttpUtility.JavaScriptStringEncode is not really required here. Simply

 '@Html.Raw(s.Name)'

is worked for me.

Solution 5

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 &#39;, 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 &#39;.

.

Update 2:

This also works:

@{ViewBag.Symbol = "'";}
@MvcHtmlString.Create(ViewBag.Symbol)
Share:
59,748
iLemming
Author by

iLemming

Updated on June 17, 2020

Comments

  • iLemming
    iLemming about 4 years

    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&#39; 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>