Usuário com melhor resposta
Ajuda com validação de dois campos (ASP MVC4)

Pergunta
-
Olá, estou com problema em validar dois campos na minha aplicação MVC 4.
Eu preciso fazer uma validação que verifique os dois campos e permita que ao menos um esteja preenchido, ou seja, não permita passar os dois campos NULL... que ao menos um esteja preenchido...
Alguem pode me ajudar?
Respostas
-
controller namespace MvcApplication2.Controllers { public class HomeController : Controller { // // GET: /Home/ public ActionResult Index() { return View(); } [HttpPost] public ActionResult Index(TESTE teste) { if(ModelState.IsValid) return View(); return View(teste); } } } model public class TESTE : IValidatableObject { public Int32? Product01Id { get; set; } public Int32? Product02Id { get; set; } public IEnumerable<ValidationResult> Validate(ValidationContext validationContext) { if (Product01Id == null && Product02Id == null) yield return new ValidationResult(("Selecione pelo menos 1 produto!")); } } View @model MvcApplication2.Models.TESTE @{ ViewBag.Title = "Index"; Layout = "~/Views/Shared/_Layout.cshtml"; } <h2>Index</h2> @using (Html.BeginForm()) { @Html.AntiForgeryToken() @Html.ValidationSummary(true) <fieldset> <legend>TESTE</legend> <div class="editor-label"> @Html.LabelFor(model => model.Product01Id) </div> <div class="editor-field"> @Html.EditorFor(model => model.Product01Id) @Html.ValidationMessageFor(model => model.Product01Id) </div> <div class="editor-label"> @Html.LabelFor(model => model.Product02Id) </div> <div class="editor-field"> @Html.EditorFor(model => model.Product02Id) @Html.ValidationMessageFor(model => model.Product02Id) </div> <p> <input type="submit" value="Create" /> </p> </fieldset> } <div> @Html.ActionLink("Back to List", "Index") </div> @section Scripts { @Scripts.Render("~/bundles/jqueryval") } cria um demo ai rapido
- Marcado como Resposta Jones Santos quarta-feira, 18 de setembro de 2013 17:41
Todas as Respostas
-
dataannotations, na sua MODEL você pode herdar interface IvalidateObject e implemetar está validação no unico método que deve ser implmentado. Ele valida apenas server side então você deve validar no client também. Use o jquery. Outra forma é criar um data annotations é um pouco mais complexo, mas você pode usar em varios models segue um link como fazer com data annotations http://www.codeproject.com/Articles/301022/Creating-Custom-Validation-Attribute-in-MVC-3
- Sugerido como Resposta Leonardo Lourenço Silva quarta-feira, 18 de setembro de 2013 13:12
-
dataannotations, na sua MODEL você pode herdar interface IvalidateObject e implemetar está validação no unico método que deve ser implmentado. Ele valida apenas server side então você deve validar no client também. Use o jquery. Outra forma é criar um data annotations é um pouco mais complexo, mas você pode usar em varios models segue um link como fazer com data annotations http://www.codeproject.com/Articles/301022/Creating-Custom-Validation-Attribute-in-MVC-3
Então, eu tava usando essa ideia do IvalidateObject mas de uma maneira mais simples sem necessariamentecriar uma função espeficica para isso... para tal estou utilizando algo parecido com:
public class UserValidation : IValidatableObject
{public Nullable<int> Product01Id { get; set; } public Nullable<int> Product02Id { get; set; } public IEnumerable<ValidationResult> Validate(ValidationContext validationContext) { if (Product01Id == null && ProfileScriptId == Product02Id) yield return new ValidationResult(("Selecione pelo menos 1 produto!"), new[] { "Product01Id", "Product02Id"}); }
}Porém essa validação não está funcionando com o IEnumerable...
Tem algo de errado?
-
public Int32? Product01Id { get; set; }
public Int32? Product02Id { get; set; }
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
if (Product01Id == null && Product02Id == null)
yield return new ValidationResult(("Selecione pelo menos 1 produto!"));
}funcionou bem aqui !!! olha como esta minha controler
if(ModelState.IsValid)
return View();
return View(teste); -
public Int32? Product01Id { get; set; }
public Int32? Product02Id { get; set; }
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
if (Product01Id == null && Product02Id == null)
yield return new ValidationResult(("Selecione pelo menos 1 produto!"));
}funcionou bem aqui !!! olha como esta minha controler
if(ModelState.IsValid)
return View();
return View(teste);
Valew -
controller namespace MvcApplication2.Controllers { public class HomeController : Controller { // // GET: /Home/ public ActionResult Index() { return View(); } [HttpPost] public ActionResult Index(TESTE teste) { if(ModelState.IsValid) return View(); return View(teste); } } } model public class TESTE : IValidatableObject { public Int32? Product01Id { get; set; } public Int32? Product02Id { get; set; } public IEnumerable<ValidationResult> Validate(ValidationContext validationContext) { if (Product01Id == null && Product02Id == null) yield return new ValidationResult(("Selecione pelo menos 1 produto!")); } } View @model MvcApplication2.Models.TESTE @{ ViewBag.Title = "Index"; Layout = "~/Views/Shared/_Layout.cshtml"; } <h2>Index</h2> @using (Html.BeginForm()) { @Html.AntiForgeryToken() @Html.ValidationSummary(true) <fieldset> <legend>TESTE</legend> <div class="editor-label"> @Html.LabelFor(model => model.Product01Id) </div> <div class="editor-field"> @Html.EditorFor(model => model.Product01Id) @Html.ValidationMessageFor(model => model.Product01Id) </div> <div class="editor-label"> @Html.LabelFor(model => model.Product02Id) </div> <div class="editor-field"> @Html.EditorFor(model => model.Product02Id) @Html.ValidationMessageFor(model => model.Product02Id) </div> <p> <input type="submit" value="Create" /> </p> </fieldset> } <div> @Html.ActionLink("Back to List", "Index") </div> @section Scripts { @Scripts.Render("~/bundles/jqueryval") } cria um demo ai rapido
- Marcado como Resposta Jones Santos quarta-feira, 18 de setembro de 2013 17:41
-
-
-
Você pode usar o atributo [Remote] com um campo adicional
[Remote("ValidarDataInicioAditamento", "Alunos", ErrorMessage = "Conflito com outros contratos.", AdditionalFields = "idContrato")]
Se foi útil e/ou resolveu seu problema, não esqueça de marcar como resposta.
Visite : www.codigoexpresso.com.br- Editado Código Expresso segunda-feira, 11 de julho de 2016 23:30