2009-06-24 10 views
20

Me gustaría interceptar el carácter "<" en el campo de formulario mediante un validador de expresiones regulares. Voy a describir el problema en 3 pasos:ASP.NET MVC ValidateInput (falso) deja de funcionar con xVal y [RegularExpression] DataAnnotation

Paso 1: Cuando trato de enviar un formulario con un campo que contiene el carácter "<", me sale el "petición potencialmente peligroso ..." - como se espera en ASP.NET.

Paso 2: Para evitar RequestValidation de ASP.NET, decoraré mi método de actualización en el controlador con "[ValidateInput (false)]".

Funciona como se esperaba - ahora puedo publicar el carácter "<" sin error.

Paso 3: Yo uso xVal con DataAnnotations. Por ejemplo, [Obligatorio] o [Longitud de cadena (255)] funciona como se esperaba.

pero cuando se utiliza: [RegularExpression ("Los caracteres especiales no están permitidos" "^ [^ <>] * $", ErrorMessage =)], consigo la "petición Potencialmente dangeros ... "Error nuevamente, a pesar de la directiva [ValidateInput (false)].

¿Qué está pasando? ¿Hay alguna manera más simple para la validación de regex, pero con [ValidateInput (false)] en su lugar? Por supuesto, me gustaría tener mi código de validación en el modelo, no en el controlador.

+2

Teniendo en cuenta que el bot de la comunidad SO ha llevado esto a la cima, ¿puede confirmar si esto todavía es un problema? –

+2

No, fue un insito en MVC 1 + xVal. En MVC 2 la validación funciona como se supone (y no hay necesidad de xVal más). – Alex42

Respuesta

0

No, era un problema en MVC + 1 XVal. En MVC 2 la validación funciona como supuesta (y no hay necesidad de XVal más) - Alex42

Parece que el robot sigue empujando éste a la parte superior todavía. ¿Podría marcar una respuesta como aceptada para que sepa?

0

Estoy usando xVal & nhibernate.validator y traté de reproducir este comportamiento, pero como el validador está vinculado al lado del cliente, no pude obtener un valor de pasada la validación del lado del cliente. cuando deshabilité javascript, llegó a la validación del lado del servidor y fue capturado por el validador de expresiones regulares.

Intenté hacer lo mismo con el uso de los atributos de validación de anotaciones de datos y el cuaderno de modelo, y lo hice pasado también.

debe haber algo más pasando que está causando el error. ¡Lo siento, no podría ser más útil!

0

Intente validar utilizando una regla simple con this method. Esto puede al menos eliminar xVal de la ecuación. Si el problema persiste, entonces me gustaría sugerir que está relacionado con cualquiera de los dos:

  • la implementación de incumplimiento de MVC Modelo Carpeta
  • o hay un problema con el motor de vista MVC en el comunicado de su uso de eso es de alguna manera lo que permite una excepción a realizar para el atributo especificado mediante la validación de la < cuando habría de serlo
0

si sólo un campo, sólo podría escribir una rutina para buscar un carácter '< o>' y retirarla. puedes lograrlo haciendo uso de la subcadena. Esperamos que esta esto ayuda

  • uso Para bucle a la longitud de texto a ser probado (for (int i = 1, i = < text.length, ++))
  • verificar cada carácter begining 1 (por ejemplo, ch = textosubcadena (i, 1)
  • añadir que cada uno lea carácter a TMP de serie excepto '< o>'
0

supongo que el método estático Escape() resolvería esto para usted.

Regex r = new Regex(Regex.Escape(expression)); 
0

Deja esta línea en web.config

<httpRuntime requestValidationMode="2.0" /> 

Este es el cambio en ASPNET 4,0

Cuestiones relacionadas