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

时间:2011-03-07 22:02:00

标签: javascript jquery jquery-plugins asp.net-mvc-3 razor

我在我的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>

5 个答案:

答案 0 :(得分:98)

我会这样写你的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>更适合多线输出。

答案 1 :(得分:79)

以下是如何操作:

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

答案 2 :(得分:3)

试试这样:

$(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所做的通常评论:using {{ 1}}是不好的做法,我建议你使用带有视图模型的强类型视图。

答案 3 :(得分:1)

你说你已经尝试过MvcHtmlString.Create,但对我来说,这似乎对我有用:

'Trying @MvcHtmlString.Create("Testing'`")'

<强>更新

我拿了你的代码&#39;,把它放在浏览器中,复制那里显示的内容,把它放回Visual Studio中,如:

@MvcHtmlString.Create("'")

它确实有效,我只有',而不是&#39;

更新2:

这也有效:

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

答案 4 :(得分:0)

sender.removeFromSuperview() 在这里并不是必需的。 只是

@objc
func buttonPressedLeftFirst(_ sender: UIButton){

    //...
    sender.removeFromSuperview()
}

为我工作。