La necesidad de escapar de las cotizaciones de una variable en MVC Ver pasar como un parámetro para JavaScript

StackOverflow https://stackoverflow.com/questions/1948590

Pregunta

tengo una vista MVC en el que tengo que pasar una variable de cadena de JavaScript, pero que tiene una variable de cadena entre comillas simples en ella ('). Estoy tratando de hacer algo como esto

<a onclick="JavaScript:AddressHandler.ProcessAddress('<%= homeAddress %>');" 
                            class="button-link">change</a>

homeAddress tiene comillas simples, que tengo que solucionar de algún modo para que pueda pasar el valor completo de la misma al JavaScript.

¿Fue útil?

Solución

Para escapar de una cadena a ser una cadena literal Javascript, que sustituya la barra invertida con barras invertidas dobles, y el delimitador de cadena con una barra invertida y el delimitador:

<a onclick="AddressHandler.ProcessAddress('<%= homeAddress.Replace(@"\", @"\\").Replace("'", @"\'") %>');" class="button-link">change</a>

Nota:. El protocolo javascript: se utiliza cuando se pone en la escritura de una dirección URL, no como un controlador de eventos

Editar:
Si el script también contiene caracteres que necesitan codificación HTML, que se debe hacer después de escapar de la cadena Javascript:

<a onclick="<%= Html.Encode("AddressHandler.ProcessAddress('" + homeAddress.Replace(@"\", @"\\").Replace("'", @"\'") +"');") %>" class="button-link">change</a>

Por lo tanto, si usted no sabe lo que contiene la cadena, para estar seguro que necesita para escapar primero la cadena literal, entonces HTML codificar el código de modo que se puede poner en el atributo de la etiqueta HTML.

Otros consejos

Puede utilizar Ajax ayudante: Ajax.JavaScriptStringEncode(string strToEncode)

Puede escribir un método que escapa a todas las comillas simples (y otros caracteres si es necesario) con una barra invertida por lo que no es mal interpretado por el javascript.

Usted querrá codificar homeAddress como una dirección URL. MVC ha incorporado un ayudante para hacer esto: UrlHelper.Encode (cadena URL) - debe reemplazar una sola cita con %27

No tengo tiempo para probarlo, pero mira HtmlHelper.Encode (cadena s). Podría manejar el escape para usted.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top