Ich verwende MVC5 und versuche ein Formular zu validieren.EmailAddress DataAnnotation-Markierung als gültig für View, aber ModelState.IsValid = false?
Wenn ich eine ungültige E-Mail-Adresse auf dem Feld einfügen, zeigt es die Fehlermeldung
Wenn ich ein @ ein einfügen (das ist eine gültige E-Mail-Adresse ist), die Validierung Pass-Front-End , aber am Back-End zeigt mein ModelState einen Fehler im E-Mail-Feld an, dass dies ungültig ist.
Wenn ich [email protected] einfüge, werden beide Validierungsseiten übergeben!
Hinweis: Ein großer Teil der anderen SO-Antworten bezogen sich auf "E-Mail-Validierung funktioniert nicht auf MVC", die Lösung bestand darin, das EmailAddress-Attribut zu verwenden, das ich bereits verwende.
Ansicht
@using (Ajax.BeginForm("EnviarMensagemContato", "home", new AjaxOptions { HttpMethod = "POST", OnBegin = "showLoading", OnComplete = "showJsonModalMessage" }, new { @id = "contact-form" }))
{
@Html.AntiForgeryToken()
<div class="col-md-6 lateral-division">
<div class="form-group">
@Html.TextBoxFor(m => m.ContatoViewModel.Nome, new { @class = "form-control required", placeholder = "nome" })
@Html.ValidationMessageFor(m => m.ContatoViewModel.Nome)
</div>
<div class="form-group">
@Html.TextBoxFor(m => m.ContatoViewModel.EmailAddress, new { @class = "form-control required", placeholder = "email" })
@Html.ValidationMessageFor(m => m.ContatoViewModel.EmailAddress)
</div>
<div class="form-group">
@Html.TextAreaFor(m => m.ContatoViewModel.Mensagem, 4, 4, new { @class = "form-control required", placeholder = "mensagem" })
@Html.ValidationMessageFor(m => m.ContatoViewModel.Mensagem)
</div>
</div>
<div class="btn-group pull-right btn-send-message">
<input type="submit" value="enviar" id="enviar-mensagem" class="btn btn-default" />
</div>
}
Modell
public class ContatoViewModel
{
[Required(ErrorMessage="campo obrigatório"),
Display(Name = "nome")]
public String Nome { get; set; }
[Required(ErrorMessage = "campo obrigatório"),
Display(Name = "nome"), MaxLength(254,ErrorMessage="email inválido"),
EmailAddress(ErrorMessage="email inválido")]
public String EmailAddress { get; set; }
[Required(ErrorMessage = "campo obrigatório"),
Display(Name = "nome"), MaxLength(500, ErrorMessage = "maximo de 500 caracteres")]
public String Mensagem { get; set; }
}
-Controller
public JsonResult EnviarMensagemContato(ModelContainer model)
{
try
{
if (ModelState.IsValid)
{
//zalgo
}
}
}
Ihr Ansichtsmodell scheint nicht das Attribut EmailAddress zu haben. – qamar
@ Qamar es hat, aber asp.net aus irgendeinem Grund verkettet die Datenannotationen in einer einzigen Zeile, d. H .: '[erforderlich (..), maxlength (..)]' anstelle von separaten Zeilen. Es ist auf dem Code. Grüße " –
' a @ a' ist keine gültige E-Mail-Adresse. Und als Randnotiz können Sie die Regex sehen, die vom Attribut [hier] verwendet wird (https://github.com/Microsoft/referencesource/blob/ master/System.ComponentModel.DataAnnotations/DataAnnotations/EmailAddressAttribute.cs) –