Javascript,Razor和Escape字符.像撇号一样

iLe*_*ing 58 javascript jquery jquery-plugins razor asp.net-mvc-3

我在我的MVC3项目中使用Razor.而且我也在使用FullCalendar JQuery插件.因此,当我试图填充数组时,它运行良好.除了一件事.如果s.Name包含撇号,它就会像'我想要的那样渲染.我尝试使用不同的方法,如Encode和Decode,甚至MvcHtmlString.Create,结果总是一样的.

这是代码片段:

<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>
Run Code Online (Sandbox Code Playgroud)

GvS*_*GvS 106

我会像这样写你的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>
            }
Run Code Online (Sandbox Code Playgroud)
  • Html.Raw 跳过html转义.
  • <text> 多线输出更好.

  • 丹尼,看看我的逃避/编码的答案. (4认同)
  • 这不会逃避撇号吗? (3认同)
  • 如果字符串包含 '&lt;/script&gt;' ,这也会失败:( (2认同)
  • 这似乎在没有 html.raw 的情况下工作,所以在我的情况下, Razor: string msg = "test's" then, onclick="confirmRun('@HttpUtility.JavaScriptStringEncode(msg)')" 工作正常。添加html.raw的原因是什么? (2认同)

Fab*_*ice 79

这是怎么做的:

title: '@Html.Raw(HttpUtility.JavaScriptStringEncode(s.Name))'
Run Code Online (Sandbox Code Playgroud)


Dar*_*rov 5

像这样尝试:

$(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))
    });
});
Run Code Online (Sandbox Code Playgroud)

ViewBag.Sessions可能需要进行一些修改才能获得所需的结果(在属性名称方面),这让我想起了ViewBag当我看到有人使用它时的通常评论:使用ViewBag是不好的做法,我建议您使用带有查看模型。


Vij*_*ian 5

HttpUtility.JavaScriptStringEncode这里并不是真正需要的。简单地

 '@Html.Raw(s.Name)'
Run Code Online (Sandbox Code Playgroud)

对我有用。