Precisa escapar das citações de uma variável na vista do MVC para passar como um parâmetro para JavaScript

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

Pergunta

Eu tenho uma visão MVC na qual tenho que passar uma variável de string para JavaScript, mas essa variável de string tem citações únicas ('). Estou tentando fazer algo assim

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

O HomeAddress possui citações únicas que eu tenho que alternar de alguma forma para que eu possa passar o valor completo dela para o JavaScript.

Foi útil?

Solução

Para escapar de uma string para ser uma string javascript literal, você substitui a barra de barragem por barragens duplas e o delimitador de string com uma barra de barra e o delimitador:

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

Note o javascript: O protocolo é usado quando você coloca o script em um URL, não como um manipulador de eventos.

Editar:
Se o script também contiver caracteres que precisam de codificação HTML, isso deve ser feito após escapar da string javascript:

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

Portanto, se você não sabe o que a string contém, para ser seguro, você precisa primeiro escapar da string literal, codifica o código HTML para que ela possa ser colocada no atributo da tag HTML.

Outras dicas

Você pode usar o Ajax Helper: Ajax.JavaScriptStringEncode(string strToEncode)

Você pode escrever um método que escape de todas as cotações únicas (e de outros caracteres, se necessário) com uma barra de barra, para que não seja mal compreendido pelo JavaScript.

Você vai querer codificar homeaddress como um URL. O MVC tem um ajudante embutido para fazer isso: Urlhelper.encode (URL da string) - deve substituir uma única cotação por %27

Não tenho tempo para testá -lo, mas olhe para htmlhelper.encode (string s). Pode lidar com a fuga para você.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top