2011-08-19 19 views
5

Estoy utilizando ASP.NET MVC3 e intento validar un campo URL utilizando DataAnnotacionesExtensiones.MVC DataAnnotations Validación de URL

Es casi lo que necesito. Sin embargo, se obliga al usuario a añadir "http: //" al beggining de la cadena de URL, si no, se mostrará el siguiente mensaje de validación:

The URL field is not a valid fully-qualified http, https, or ftp URL. 

En la URL de anotaciones de datos Extensiones demo page que muestra una Validador adicional Url Sin protocolo Necesario, pero no puedo encontrarlo en ningún lado.

¿Cómo puedo usar este validador, o cómo puedo validar fácilmente la URL sin la parte "http: //"?

Respuesta

11

La opción sin protocolo para DataAnnotesExtensions está disponible en el código fuente pero se considera beta o "vNext" y no se ha liberado como parte del paquete NuGet. Entonces, si descargas el código fuente y compilas, verás que el atributo [Url] tiene una sobrecarga [Url (requireProtocol: false)]. Puede ver esto en el último archivo UrlAttribute.cs (UrlArribute.cs). Además, si observa las DataAnnotationsExtensions wiki verá que esta característica está programada para lanzarse pronto (estoy pensando en la próxima semana o dos para una próxima versión oficial).

+0

Gracias de nuevo, Scott. Veré el código fuente. –

5

sólo para completar esto:

Desde MVC3 ahora podemos utilizar [URL] atributo de validación.

[Required] 
[Url] 
public string Website { get; set; } 
+2

Ding ding ding! ¡Tenemos un ganador! – markthewizard1234

+0

¿Hay alguna manera de hacerlo opcional? – DonO

0

No pude encontrar un atributo integrado para que coincida con una URL y acepto el protocolo como opcional.

Así que en lugar, he utilizado la siguiente validador RegularExpression:

public class MediaModel 
{ 
    public long MediaId { get; set; } 
    [StringLength(60)] 
    [RegularExpression(@"((([A-Za-z]{3,9}:(?:\/\/)?)(?:[-;:&=\+\$,\w][email protected])?[A-Za-z0-9.-]+|(?:www.|[-;:&=\+\$,\w][email protected])[A-Za-z0-9.-]+)((?:\/[\+~%\/.\w-_]*)?\??(?:[-\+=&;%@.\w_]*)#?(?:[\w]*))?)", ErrorMessage = "Not a valid website URL")] 
    public string Website { get; set; } 
    [DisplayName("YouTube Video")] 
    [StringLength(200)] 
    [RegularExpression(@"((([A-Za-z]{3,9}:(?:\/\/)?)(?:[-;:&=\+\$,\w][email protected])?[A-Za-z0-9.-]+|(?:www.|[-;:&=\+\$,\w][email protected])[A-Za-z0-9.-]+)((?:\/[\+~%\/.\w-_]*)?\??(?:[-\+=&;%@.\w_]*)#?(?:[\w]*))?)", ErrorMessage = "Not a valid YouTube video")] 
    public string YouTubeVideo { get; set; } 
} 

copié la expresión regular de here, es una buena idea.

Cuestiones relacionadas