side net mvc formulario form data create asp asp.net-mvc-4 unobtrusive-validation jquery-validation-engine

asp.net mvc 4 - net - validación url mvc4



validation asp net mvc (2)

Estoy escribiendo esta pregunta aquí después de intentar encontrar una respuesta durante dos días.

Básicamente esto es lo que está pasando.

Tengo una propiedad en el modelo de visualización de la siguiente manera

[Required(ErrorMessage = "Required Field")] [Url(ErrorMessage="Please enter a valid url")] [DisplayName("Website")] public string web { get; set; }

en la vista, tengo esto

@Html.EditorFor(model => model.web, new { AutoCompleteType = "Disabled", autocomplete = "off" })

ahora el problema radica en cómo se valida el texto de entrada para este campo en el lado del cliente. el campo debe tener el prefijo de protocolo en todo momento, de lo contrario se vuelve inválido.

¿Cuál es la mejor manera en que puedo solucionar este problema?

Muchas gracias


No estoy seguro si entiendo completamente la pregunta. ¿Estás tratando de validar las URL correctamente formadas? Si es así, podría implementar una declaración de datos de expresión regular de la siguiente manera:

[RegularExpression(@"^http(s?)/:////[0-9a-zA-Z]([-./w]*[0-9a-zA-Z])*(:(0-9)*)*(//?)([a-zA-Z0-9/-/./?/,/'/////+&%/$#_]*)?$", ErrorMessage = "My Error Message")]


Puedes hacer esto usando la biblioteca DataAnnotationsExtensions . Tienen un UrlAttribute que puede configurar para validar solo cuando se especifica un protocolo. Este atributo también proporciona validación del lado del cliente. Puede ver un ejemplo de este comportamiento aquí: http://dataannotationsextensions.org/Url/Create

Puede utilizar este atributo de la siguiente manera:

using System.ComponentModel.DataAnnotations; namespace DataAnnotationsExtensions.Core { public class UrlEntity { [Url] [Required] public string Url { get; set; } [Url(UrlOptions.OptionalProtocol)] [Required] public string UrlWithoutProtocolRequired { get; set; } [Url(UrlOptions.DisallowProtocol)] [Required] public string UrlDisallowProtocol { get; set; } } }

Para tus propósitos, la primera opción es suficiente.

El paquete de esta biblioteca (con soporte ASP.NET MVC incluido) se puede encontrar en NuGet: Install-Package DataAnnotationsExtensions.MVC3

Nota: esto también funciona bien con ASP.NET MVC 4