我在我的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>
答案 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'`")'
<强>更新强>
我拿了你的代码'
,把它放在浏览器中,复制那里显示的内容,把它放回Visual Studio中,如:
@MvcHtmlString.Create("'")
它确实有效,我只有'
,而不是'
。
更新2:
这也有效:
@{ViewBag.Symbol = "'";}
@MvcHtmlString.Create(ViewBag.Symbol)
答案 4 :(得分:0)
sender.removeFromSuperview()
在这里并不是必需的。
只是
@objc
func buttonPressedLeftFirst(_ sender: UIButton){
//...
sender.removeFromSuperview()
}
为我工作。