Estoy usando una navaja de Afeitar en mi MVC3 proyecto. Y también estoy usando FullCalendar plugin de JQuery. Así que cuando estoy tratando de llenar la matriz funciona bien. Excepto una cosa. Si s.Nombre contiene un apóstrofo se representa como' que no es lo que quiero. He intentado utilizar diferentes métodos como el de Codificar y Decodificar e incluso MvcHtmlString.Crear y el resultado es siempre el mismo.

Aquí está el fragmento de código:

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

InformationsquelleAutor iLemming | 2011-03-07

5 Comentarios

  1. 102

    Que yo iba a escribir su foreach como este:

                @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 saltarse el código html de escapar.
    • <text> es mejor para varias líneas de salida.
    • que realmente funcionó! excepto que necesito para tener el título en dobles comillas y prohíben el uso de ellos en las Sesiones de los nombres de los
    • Esto no escapa a los apóstrofes?
    • Danny, ver mi respuesta para escapar de codificación.
    • Sí, yo lo vi, yo era sólo un loco aceptado la respuesta está abierto al abuso ;O(
    • He editado esta respuesta para codificar el JS, así que al menos la gente de copiar/pegar no ser la creación de pobres vulnerables código 🙁
    • Buena idea
    • Esto también se producirá un error si la cadena contiene ‘</script>’ 🙁
    • Esto parece funcionar sin html.raw, así que en mi caso, maquinilla de Afeitar: string msg = «prueba» entonces, onclick=»confirmRun(‘@HttpUtility.JavaScriptStringEncode(msg)’)» ha funcionado muy bien. ¿Cuál es la razón para agregar html.raw?

  2. 79

    Aquí está cómo hacerlo:

    title: '@Html.Raw(HttpUtility.JavaScriptStringEncode(s.Name))'
    • muy bonito. este es el camino a seguir.
    • Esto es útil cuando se utiliza '@Html.Raw(HttpUtility.JavaScriptStringEncode(Resources.MyFile.ResourceName))' con el texto que contiene el código HTML como las traducciones pueden contener apóstrofes etc.
    • No es este trabajo en el orden incorrecto? Queremos decodificar html primero y luego codificar la cadena de javascript.
    • Si desea decodificar HTML, entonces usted debe utilizar HttpUtility.HtmlDecode
    • No he entendido. Gracias.
    • Esto se producirá si la cadena contiene ‘</script>’ 🙁
    • Gracias, funcionó para mí! 🙂

  3. 3

    Tratar como este:

    $(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 podría requerir algunas modificaciones para lograr el resultado deseado (en términos de nombres de propiedad), lo que me lleva a la habitual comentario que hago sobre ViewBag cuando veo a alguien usando: el uso de ViewBag es una mala práctica y yo recomiendo el uso de un inflexible ver con un modelo de vista.

    • Wow…wow… wow… que interesante… podría usted por favor decirme cómo la estructura (ViewBag.Período de sesiones) debe buscar? Yo no soy tan bueno con javascript y todavía no estoy seguro de cómo la estructura similar sería mirada como en c# . Lo siento
    • Me recomienda que no utilice ViewBag en la acción del controlador. Pero si usted insiste ViewBag.Sessions debe ser un IEnumerable<T> donde T es una clase con propiedades: Title, Start y End. Por ejemplo: ViewBag.Sessions = new[] { new { Title: 'foo', Start: DateTime.Now, End: DateTime.Now.AddHours(5) } };
    • Esto se producirá si la cadena contiene ‘</script>’ 🙁
    • cómo reproducir el problema? El siguiente funciona bien: <script> @{ var texto = «vamos a usar </script>»; } alert(‘@Html.Raw(HttpUtility.JavaScriptStringEncode(texto))’); </script>
    • No cuando lo intenté; como el navegador interpreta el </script> etiqueta en la cadena como el final de la etiqueta de script (por ejemplo. ver aquí). ¿Qué navegador hizo pruebe?
    • No recuerdo. Esto es demasiado malo. Yo habría pensado que este error se había fijado desde el año 2012.

  4. 1

    Usted dijo que usted ya ha intentado MvcHtmlString.Crear, pero para mí, esto parece funcionar correctamente para mí:

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

    .

    Actualización:

    Tomé su código &#39;, poner en el navegador, copiado lo que se mostró allí, poner de nuevo en Visual Studio, como:

    @MvcHtmlString.Create("'")

    Y funcionó, yo sólo tengo ' de nuevo, no &#39;.

    .

    Actualización 2:

    Esto también funciona:

    @{ViewBag.Symbol = "'";}
    @MvcHtmlString.Create(ViewBag.Symbol)
    • cambiado esto: @: título: ‘@s.Nombre’, en este: @: título: ‘@MvcHtmlString.Crear(@s.Nombre)’, ….. No trabajo. Hace nada en la pantalla
    • pero si pongo algo ‘@MvcHtmlString.Crear(«una cadena con una cita’ «)’ – funciona.
    • ¿Qué es la codificación de la página y de la cadena en 1s.Nombre`? Tal vez este es el problema? Trate de asegurarse de en su navegador de ver la página en UTF-8 o así, tal vez?
    • así que, de alguna manera, maquinilla de Afeitar no quieres salir esto: @MvcHtmlString.Crear(@s.Nombre). Por qué?
    • Creo que es específica para su s.Nombre de la cadena y de un poco de cultura o por lo que puede tener o el nombre puede estar codificado en.
    • Pruebe con @MvcHtmlString.Crear(s.Nombre), es decir, sin la ‘@’
    • Por CIERTO, @MvcHtmlString.Create(@s.Name) es incorrecta, debe ser @MvcHtmlString.Create(s.Name)
    • LOL, usted lo ha dicho el mismo tiempo, @willvv 😀
    • Mi mayor apuesta está en el extra @ ahora. willvv parece estar de acuerdo, y que en realidad tiene sentido, @Agzam, por favor, pruebe y nos diga si funciona 🙂

  5. 0

    HttpUtility.JavaScriptStringEncode realmente no es necesaria aquí.
    Simplemente

     '@Html.Raw(s.Name)'

    se trabajó para mí.

Dejar respuesta

Please enter your comment!
Please enter your name here