validate validar funciona formularios formulario ejemplos ejemplo como bootstrap c# jquery asp.net-mvc forms encoding

c# - funciona - validar formulario jquery bootstrap



¿Por qué tengo que codificar una cadena al leer y escribir entradas de formulario usando jquery? (13)

Creo que no hay necesidad de hacer nada con su código , funciona correctamente, tengo el siguiente código, confírmelo.

Ver / HTML:

@using (@Html.BeginForm("Save", "Home", FormMethod.Post, new { id = "myForm", name = "myForm" })) { <input type="button" class="btn btn-danger" value="Click" id="btnClick"> }

Jquery:

$(document).ready(function () { var myForm = $("#myForm"); myForm.append(''<input type="hidden" name="List" value="Key Date & Times" />''); $(''#btnClick'').click(function () { var myForm = $("#myForm"); myForm.submit(); }); });

Controlador:

public ActionResult Save() { return RedirectToAction("Index"); }

Salida:

Estoy leyendo datos de una entrada de texto programáticamente usando Jquery estándar como este:

var listName = $(''#list'').val();

y luego estoy agregando un campo de entrada oculto en un formulario antes de enviarlo de esta manera:

var myForm = $("#myForm); myForm.append(''<input type="hidden" name="List" value="'' + listName + ''" />'');

En un ejemplo, el valor en el campo es:

Key Date & Times

así que en la interfaz de usuario se ve así

<input type="hidden" name="MyList" value="Key Date & Times" />

Cuando entrego el formulario usando:

var myForm = $("#myForm); myForm.submit();

y verifíquelo en el lado del servidor asp.net-mvc, solo veo:

Key Date

siendo enviado Después de algunas investigaciones, se sugirió escribir algunos javascript para ejecutar el valor a través de:

encodeURIComponent()

Después de hacer eso y echar un vistazo al lado del servidor, ahora veo:

Key%20Date%20%26%20Times

¿Cómo puedo convertir eso de nuevo a

Key Date & Times

en el lado del servidor C # asp.net-mvc? O bien, si estoy haciendo algo mal en el lado del cliente, déjame si tienes alguna sugerencia.

Mi pregunta principal es por qué tengo que preocuparme por codificar el valor de un cuadro de entrada oculto en un formulario. Pensé que esto sería cuidado por ti.


Es muy probable que esté enviando una solicitud GET al servidor y, por lo tanto, todos los valores de cada campo de formulario de entrada se publican en el servidor en la cadena de consulta.

De esta manera, como ya lo dijo Zulqarnain Jalil , cada ''&'' es interpretado por el servidor como un separador de los pares clave / valor en la cadena de consulta, por lo que se pierde la última parte de su formulario de entrada oculto "Lista" campo.

Por lo tanto, en este caso, debe codificar de forma url todos sus valores con "&" char.

En cambio, si envía una solicitud POST al servidor, no necesita realizar ninguna codificación url de los valores de los campos de formulario, ya que se transfieren al servidor por separado, es decir, no en la misma cadena.

Si desea evitar la codificación url, intente transformar su solicitud en una solicitud POST:

var myForm = $("#myForm"); myForm.method = "post"; myForm.submit();


Hay algo mal en el lado del cliente . ¡He probado el siguiente código que es como el que escribiste y funcionó bien !

<input type="hidden" id="ref" value="Key Date & Times" /> <form id="form1" action="~/home/handle" method="post"> <input type="submit" /> </form> <script> var myForm = $(''#form1''); var listName = $(''#ref'').val(); myForm.append(''<input type="hidden" name="name" value="'' + listName + ''" />''); </script>

¡No necesitas utilizar herramientas de conversión!


Mucho de esto tiene que ver con la implementación de seguridad contra los ataques de secuencias de comandos entre sitios (XSS). Debe codificar todos los campos de entrada html que se utilizarán en la solicitud posterior. De lo contrario, alguien podría agregar domaliciousStuff () a un campo de texto y se almacenaría en la base de datos. Luego, cuando los datos se muestren en el formulario nuevamente, su script (ahora guardado en la base de datos, se ejecutará en la página web).

AntiXSS es una gran biblioteca que posee más capacidades que el código Html.Encode incorporado. Lo puedes encontrar a través de Nuget Package Manager.

https://www.nuget.org/packages/AntiXSS/


Puedes reemplazar todos los% 20 con espacios.

string values = "Key%20Date%20%26%20Times"; string decodeString = values.replace(/%20/g,'' '');


Simplemente puede agregar accept-charset = "ISO-8859-1" en la etiqueta de formulario y no se preocupe de que la codificación convierta automáticamente los caracteres especiales.

<!DOCTYPE html> <html> <body> <form action="demo_form.asp" accept-charset="ISO-8859-1"> First name: <input type="text" name="fname"><br> Last name: <input type="text" name="lname"><br> <input type="submit" value="Submit"> </form> </body> </html>

Puedes probarlo here


Su pregunta principal que codifica el valor de un cuadro de entrada oculto en un formulario puede responderse de esta manera y esto simplemente no se refiere a las entradas ocultas que se relacionan con los datos que se publican en el servidor .

Cuando los datos contienen espacios y caracteres especiales como (&) en su caso, es responsabilidad del desarrollador de la aplicación codificarlos para que el servidor pueda procesar los datos de forma segura. Tener espacios y caracteres especiales plantea problemas de seguridad como XSS. Este es solo uno de los muchos pasos que un desarrollador responsable debe tomar para mitigar dichas amenazas de seguridad.

Con respecto a cómo recuperar los valores en el lado del servidor, use la siguiente clase que se encuentra en el espacio de nombres System.Web

string values = "Key%20Date%20%26%20Times"; string decodeString = HttpUtility.UrlDecode(values);

Espero que responda a su pregunta (s)


También puedes usar. Hay un error tipográfico en var myForm = $("#myForm");

string decodeString = Server.UrlDecode("Key%20Date%20%26%20Times");

O

string decodeString = Uri.UnescapeDataString("Key%20Date%20%26%20Times");


Tuve el mismo problema 3 a 4 días atrás. Estaba trabajando con Angular y ASP. Al igual que las respuestas del estado anterior, yo también tuve que usar URLDecode.

Respondiendo a su pregunta: - ¿Por qué debo codificar la entrada del usuario?

Evitar comportamientos inesperados

Digamos que su aplicación puede manejar dos parámetros en una solicitud GET.

Esto solo toma en un argumento
localhost:5000/stalls?searchbook=

Esto lleva en dos argumentos
localhost:5000/stalls?searchbook=&includesecret=

También tienes una página que puede buscar libros.
Cualquiera que sea el tipo de usuario en la barra de búsqueda, se obtiene una solicitud GET.
localhost:5000/stalls?searchbook=USERSTRINGGOESHERE

Si el usuario buscara &includesecret=true
Solicitud GET resultante localhost:5000/stalls?searchbook=&includesecret=true y puede provocar accidentalmente que los datos privados se filtren al usuario en la página de resultados.

Los símbolos que normalmente están codificados (espacios, &,%, etc.) muchas veces pueden significar cosas diferentes. ''&'' separa las claves en una solicitud GET y también puede ser parte de una cadena, por lo que su uso sin codificación puede resultar en un comportamiento esperado.

PD: - Los datos privados no deben consultarse a través de una solicitud GET. Es solo por el bien de este ejemplo :)

Consistencia

Al probar mi aplicación, noté que PhantomJS codificaba cadenas de forma predeterminada. De esta manera obtuve diferentes resultados de búsqueda en diferentes clientes. Por lo tanto, es seguro asumir que algunos clientes pueden codificar la URL incluso si no lo hace.

Otro ejemplo

Las claves ''#'' pueden ser parte de una URL. Si visito localhost:5000/homepage.html#footer muestra el elemento con el pie de página de ID. Esto también puede causar un comportamiento que usted no espera. Intente ingresar # en los parámetros de una solicitud GET que no están codificados ni están limpios de caracteres no alfabéticos y lo más probable es que termine en una situación similar a la mía. La funcionalidad de búsqueda que escribí hace unos días se rompería si ingresara # en ella (cuando no estaba codificada).


Usted dijo que su pregunta principal es:

¿por qué tengo que preocuparme por codificar el valor de un cuadro de entrada oculto en un formulario? Pensé que esto sería cuidado por ti.

Bueno, la respuesta es porque de lo contrario podría dar lugar a problemas de inyección. (Además, los campos ocultos no son el lugar para almacenar información confidencial y me pregunto por qué se oculta esa entrada, ya que, al ocultarla, no cambiará su comportamiento ...)

Para solucionar su problema, puede combinar las funciones htmlEscape y string replace, como en la respuesta a esta pregunta ( codificar el valor del campo de formulario oculto )

function htmlEscape(str) { return String(str) .replace(/&/g, ''%26'') .replace(/ /g, ''%20''); }

Espero que ayude.


esto sucede cuando utiliza el método GET para enviar un formulario (en el método GET ''&'' actúa como separador de variables), tiene que usar el método POST o la manipulación de cadenas.

si está utilizando encodeURIComponent() puede volver a convertirlo utilizando Server.UrlDecode(""); en el lado del servidor

También puede leer esto para un conocimiento adicional Haga clic aquí


tendrá que decodificarlo en el lado del servidor ... puede poner el texto ''Fecha y hora clave'' en el cuadro here y puede ver que el resultado del servidor contiene% 26 en lugar de & ...


string decodeString = HttpUtility.UrlDecode(@"Key%20Date%20%26%20Times");

Utilice el método HttpUtility clase HttpUtility .