web-dev-qa-db-ja.com

Javascript、Razor、およびエスケープ文字。アポストロフィのように

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>
57
iLemming

私はあなたの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>は、複数行の出力に適しています。
102
GvS

方法は次のとおりです。

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

あなたはすでにMvcHtmlString.Createを試したと言いましたが、私にとっては、これは私にとっては正しく動作するようです:

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

更新:

あなたのコードを取りました&#39;、ブラウザに入れ、そこに表示されているものをコピーし、Visual Studioに戻します。

@MvcHtmlString.Create("'")

そしてそれはうまくいきました、私は'戻る、&#39;

更新2:

これも機能します:

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

HttpUtility.JavaScriptStringEncodeは実際にはここでは必要ありません。単に

 '@Html.Raw(s.Name)'

私のために働いています。

0
Vijai Sebastian