Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Validação indevida

Criei uma View, baseada em um ViewModel, que contém vários componentes que se destinam a filtrar uma determinada entidade.

Tem campos de texto, dropdownlists e até um checkbox.

O View model tem nenhum campo Required. A única Annotation é de um campo de formato Data.

Seria para o usuário escolher prencher alguns campos e clicar no botão Filtrar.

O problema é que ele está fazendo validação. Se eu não preencher todos os campos ele fica no formulário e não encaminha o Post.

Por que está acontecendo a validação se não há nada no model que exija esse preenchimento?

Esse é o ViewModel:

public class FiltroDeProcessosViewModel
    {
        public IList<Processo> filtrados { get; set; }

        public int ClienteID { get; set; }
        public virtual Cliente Cliente { get; set; }
        public SelectList Clientes { get; set; }

        public string AdvogadoID { get; set; }
        public virtual ApplicationUser Advogado { get; set;  }
        public SelectList Advogados { get; set; } 

        public int Pasta { get; set; }

        public int TipoAcaoID { get; set; }
        public virtual TipoAcao TipoAcao { get; set;  }
        public SelectList TiposAcao { get; set; }

        public int TipoNaturezaID { get; set; }
        public virtual TipoNatureza TipoNatureza { get; set; }
        public SelectList TiposNatureza { get; set; }

        public int FaseProcessoID { get; set; }
        public virtual FaseProcesso FaseProcesso { get; set; }
        public SelectList FasesProcesso { get; set; }

        public int ForoProcessoID { get; set; }
        public virtual ForoProcesso ForoProcesso { get; set; }
        public SelectList ForosProcesso { get; set; }

        public int JurisdicaoProcessoID { get; set; }
        public virtual JurisdicaoProcesso JurisdicaoProcesso { get; set; }
        public SelectList JurisdicoesProcesso { get; set; }

        public Boolean ArquivoMorto { get; set; }

        public int TipoPrazoID { get; set; }
        public virtual TipoPrazo TipoPrazo { get; set; }
        public SelectList TiposPrazo { get; set; }

        [DataType(DataType.Date)]
        public DateTime LimitePrazo { get; set; }

        public int TipoDecisaoID { get; set; }
        public virtual TipoDecisao TipoDecisao { get; set; }
        public SelectList TiposDecisao { get; set; }
    }

E esse é a View:

@model CBMMSapp.Models.Filtros.FiltroDeProcessosViewModel

@{
    ViewBag.Title = "CBMMS app";
}

<h2>Filtrar processos</h2>

@using (Html.BeginForm("FiltroDeProcessos", "Processos", FormMethod.Post))
{
    @Html.AntiForgeryToken()

    <div class="form-horizontal">
        <hr />
        <h4>Selecione um ou mais dos filtros abaixo:</h4>
        <div class="form-group">
            @Html.LabelFor(model => model.Pasta, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.Pasta, new { htmlAttributes = new { @class = "form-control" } })
            </div>
        </div>
        <div class="form-group">
            @Html.LabelFor(model => model.ClienteID, "Cliente", htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.DropDownList("ClienteID", Model.Clientes, "Selecione um cliente", htmlAttributes: new { @class = "form-control" })
            </div>
        </div>

        <div class="form-group">
            @Html.LabelFor(model => model.AdvogadoID, "Advogado", htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.DropDownList("AdvogadoID", Model.Advogados, "Selecione um responsável", htmlAttributes: new { @class = "form-control" })
            </div>
        </div>

        <div class="form-group">
            @Html.LabelFor(model => model.TipoNaturezaID, "Natureza", htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.DropDownList("TipoNaturezaID", Model.TiposNatureza, "Selecione a natureza", htmlAttributes: new { @class = "form-control" })                
                </div>
        </div>

        <div class="form-group">
            @Html.LabelFor(model => model.TipoAcaoID, "Tipo de ação", htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.DropDownList("TipoAcaoID", Model.TiposAcao, "Selecione o tipo de ação", htmlAttributes: new { @class = "form-control" })
            </div>
        </div>

        <div class="form-group">
            @Html.LabelFor(model => model.FaseProcessoID, "Fase", htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.DropDownList("FaseProcessoID", Model.FasesProcesso, "Selecione a fase do processo", htmlAttributes: new { @class = "form-control" })
            </div>
        </div>

        <div class="form-group">
            @Html.LabelFor(model => model.ForoProcessoID, "Foro", htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.DropDownList("ForoProcessoID", Model.ForosProcesso, "Selecione o foro do processo", htmlAttributes: new { @class = "form-control" })
            </div>
        </div>

        <div class="form-group">
            @Html.LabelFor(model => model.JurisdicaoProcessoID, "Jurisdição", htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.DropDownList("JurisdicaoProcessoID", Model.JurisdicoesProcesso, "Selecione a jurisdição do processo", htmlAttributes: new { @class = "form-control" })
            </div>
        </div>

        <div class="form-group">
            @Html.LabelFor(model => model.TipoDecisaoID, "Tipo de decisão", htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.DropDownList("TipoDecisaoID", Model.TiposDecisao, "Selecione o tipo de decisão", htmlAttributes: new { @class = "form-control" })
            </div>
        </div>

        <div class="form-group">
            @Html.LabelFor(model => model.ArquivoMorto, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                <div class="checkbox">
                    @Html.EditorFor(model => model.ArquivoMorto)                    
                </div>
            </div>
        </div>

        <div class="form-group">
            @Html.LabelFor(model => model.TipoPrazoID, "Tipo de prazo", htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.DropDownList("TipoPrazoID", Model.TiposPrazo, "Selecione o tipo de prazo", htmlAttributes: new { @class = "form-control" })
            </div>
        </div>

        <div class="form-group">
            @Html.LabelFor(model => model.LimitePrazo, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.LimitePrazo, new { htmlAttributes = new { @class = "form-control" } })
            </div>
        </div>                      

        <div class="form-group">
            <div class="col-md-offset-2 col-md-10">
                <input type="submit" value="Filtrar" class="btn btn-default" />
            </div>
        </div>
    </div>
}


@section scripts {
    @Scripts.Render("~/bundles/jqueryval")
}
2 respostas
solução!

Achei

Era apenas a validação do JQuery chamada indevidamente ao pé da View:

@section scripts {
    @Scripts.Render("~/bundles/jqueryval")
}

Coisas do Ctrl_C Ctrl_V

Olá.

Aparentemente, essa validação está sendo feita pelo jQuery no client-side.

Tente isso:

$("#idDoSeuForm").rules("remove");

EDIT:

Vi agora que era isso mesmo hehe. O problema de tirar tudo ali pode ser na renderização de alguns elementos.