MVC3プロジェクトでRazorを使用しています。また、私はFullCalendar JQueryプラグインを使用しています。したがって、配列を埋めようとすると、うまくいきます。 1つのことを除いて。 s.Nameにアポストロフィが含まれている場合、like'
それは私が望むものではありません。 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>
私はあなたの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))'
あなたはすでにMvcHtmlString.Createを試したと言いましたが、私にとっては、これは私にとっては正しく動作するようです:
'Trying @MvcHtmlString.Create("Testing'`")'
。
更新:
あなたのコードを取りました'
、ブラウザに入れ、そこに表示されているものをコピーし、Visual Studioに戻します。
@MvcHtmlString.Create("'")
そしてそれはうまくいきました、私は'
戻る、'
。
。
更新2:
これも機能します:
@{ViewBag.Symbol = "'";}
@MvcHtmlString.Create(ViewBag.Symbol)
HttpUtility.JavaScriptStringEncode
は実際にはここでは必要ありません。単に
'@Html.Raw(s.Name)'
私のために働いています。