using ExemploValidacao.Models;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Net.Mail;
using System.Web;
using System.Web.Mvc;
namespace ExemploValidacao.Controllers
{
public class PessoaController : Controller
{
//
// GET: /Pessoa/
public ActionResult Index()
{
return View();
}
[HttpPost]
public ActionResult Index(Pessoa pessoa) {
if (ModelState.IsValid)
{
return View("Resultado", pessoa);
}
else
{
return View("Index", pessoa);
}
}
public ActionResult Resultado(Pessoa pessoa)
{
return View(pessoa);
}
public ActionResult LoginUnico(string login)
{
var bancoDeNomes = new Collection<string>{
"Cleyton",
"Anderson",
"Renata"
};
return Json(bancoDeNomes.All(x => x.ToLower() != login.ToLower()), JsonRequestBehavior.AllowGet);
}
}
}
@model ExemploValidacao.Models.Pessoa
@{
ViewBag.Title = "Index";
}
@section Scripts
{
@Scripts.Render("~/bundles/jqueryval")
}
<h2>Index</h2>
@using (Html.BeginForm())
{
@Html.ValidationSummary(true)
<fieldset>
<legend>Pessoa</legend>
<div class="editor-label">
@Html.LabelFor(model => model.Nome, "Nome:")
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Nome)
@Html.ValidationMessageFor(model => model.Nome)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.Observacao, "Obs:")
</div>
<div class="editor-field">
@Html.TextAreaFor(model => model.Observacao)
@Html.ValidationMessageFor(model => model.Observacao)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.Idade, "Idade:")
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Idade)
@Html.ValidationMessageFor(model => model.Idade)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.Email, "E-mail:")
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Email)
@Html.ValidationMessageFor(model => model.Email)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.Login, "Login:")
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Login)
@Html.ValidationMessageFor(model => model.Login)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.Senha, "Senha:")
</div>
<div class="editor-field">
@Html.PasswordFor(model => model.Senha)
@Html.ValidationMessageFor(model => model.Senha)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.ConfirmarSenha, "Confirmar Senha:")
</div>
<div class="editor-field">
@Html.PasswordFor(model => model.ConfirmarSenha)
@Html.ValidationMessageFor(model => model.ConfirmarSenha)
</div>
<p><input type="submit" value="CADASTRAR" /></p>
</fieldset>
}
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Web.Mvc;
namespace ExemploValidacao.Models
{
public class Pessoa
{
[Required(ErrorMessage="Nome deve ser preenchido!")]
public string Nome { get; set; }
[StringLength(50, MinimumLength=5, ErrorMessage="A observação deve ter entre 5 a 50 caracteres")]
public string Observacao { get; set; }
[Range(18,50,ErrorMessage="A idade deve ter entre 18 e 50 anos")]
public int Idade { get; set; }
[RegularExpression("^([0-9a-zA-Z]+([_.-]?[0-9a-zA-Z]+)*@[0-9a-zA-Z]+[0-9,a-z,A-Z,.,-]*(.){1}[a-zA-Z]{2,4})+$", ErrorMessage="E-mail inválido!")]
[Required(ErrorMessage="Campo e-mail é obrigatório!")]
public string Email { get; set; }
[RegularExpression(@"[a-zA-Z]{5,15}", ErrorMessage="Login deve ter somente letras e de 5 a 15 caracteres.")]
[Required(ErrorMessage="O login deve ser preenchido!")]
[Remote("LoginUnico", "Pessoa", ErrorMessage="Este nome de login já existe!" )]
public string Login { get; set; }
[Required(ErrorMessage = "A senha deve ser informada!")]
public string Senha { get; set; }
[System.ComponentModel.DataAnnotations.Compare("Senha", ErrorMessage = "As senhas não conferem!")]
public string ConfirmarSenha { get; set; }
}
}
My field "age" does not have REQUIRED, so it should not be mandatory, but even so it is, until the mandatory field message appears. Why does it happen? Even though I remove "ValidationMessageFor" it is mandatory, except that this time without the message, only the editor will have a red border. Something is making it mandatory, but I do not want it to be.