Tengo algunos problemas con la validación de un correo electrónico.
En mi modelo:
[Required(ErrorMessage = "Field can't be empty")]
[DataType(DataType.EmailAddress, ErrorMessage = "E-mail is not valid")]
public string ReceiverMail { get; set; }
En mi vista:
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
@Html.TextBoxFor(m => m.ReceiverMail, new { @placeholder="E-mail"}) <br />
@Html.ValidationMessageFor(m => m.ReceiverMail)
Ahora me muestra correctamente "El campo no puede estar vacío" cuando deja el campo vacío. Pero cuando completa una dirección de correo electrónico no válida como: "fwenrjfw", el formulario no dice "El correo electrónico no es válido".
¿Cómo puedo obtener el formulario para validar la entrada como una dirección de correo electrónico? Estoy buscando ayuda con esto.
c#
asp.net-mvc
validation
email-validation
Java Afca
fuente
fuente
[DataType(DataType.EmailAddress, ErrorMessage = "Error message.")]
DataType.EmailAddress
no se trata de validación. Se trata de la presentación de datos ...name@xxx
es una dirección de correo electrónico completamente válida, por lo que no hay nada de malo en ese método. Considere el ejemplousername@localhost
por ejemplo.Pruebe el
Html.EditorFor
método auxiliar en lugar deHtml.TextBoxFor
.fuente
Necesita usar el atributo RegularExpression, algo como esto:
Y no elimine [Obligatorio] porque [Expresión regular] no afecta a los campos vacíos.
fuente
si aún no estás usando .net 4.5:
Entonces puedes hacer esto:
fuente
Uso MVC 3. Un ejemplo de propiedad de dirección de correo electrónico en una de mis clases es:
Elimine el
Required
si la entrada es opcional. No necesito expresiones regulares, aunque tengo una que cubre todas las opciones dentro de una dirección de correo electrónico hasta el nivel RFC 2822 (es muy larga).fuente
[EmailAddress]
y necesita tenerusing System.ComponentModel.DataAnnotations;
Email
oRegularExpression
hace que el campo es necesario. Eliminar laRequired
anotación no tiene ningún efecto. ¿Alguna sugerencia sobre qué hacer para que los campos conRegularExpression
validación acepten campos vacíos?fuente
fuente
Los scripts generalmente se cargan al final de la página html, y MVC recomienda el uso de paquetes, solo diciendo. Entonces, mi mejor apuesta es que sus
jquery.validate
archivos se alteraron de alguna manera o no se actualizan a la última versión, ya que validan las entradas de correo electrónico.Por lo tanto, puede actualizar / actualizar su paquete nuget o escribir su propia función, realmente.
Aquí hay un ejemplo que agregaría en un archivo adicional después de
jquery.validate.unobtrusive
:Esto es solo una copia y pega del
jquery.validate
Regex actual , pero de esta manera puede configurar su mensaje de error personalizado / agregar métodos adicionales a los campos que desee validar en el futuro cercano.fuente
Según lo anterior, esto solucionará la validación del lado del servidor de una dirección de correo electrónico:
Sin embargo...
Si está utilizando la validación del lado del cliente JQuery, debe saber que el correo electrónico valida de manera diferente el lado del servidor (validación del modelo) al lado del cliente (validación de JQuery). En esa prueba @ ejemplo (una dirección de correo electrónico de dominio de nivel superior) fallaría en el lado del servidor pero se validaría bien en el lado del cliente.
Para solucionar esta disparidad, puede anular la validación de correo electrónico predeterminada del lado del cliente de la siguiente manera:
fuente