Usuário com melhor resposta
data annotation Duvida

Pergunta
-
Estou com uma duvida com data annotations, é o a seguinte:
Tenho uma classe filho que herda da classe pai, porem a classe pai possui suas propriedades donde existem algumas propriedades com obrigatoriedade.
Nesse casso quando dei um submit na aplicação venho o seguinte:
if (ModelState.IsValid) "FALSE"
esta sempre trazendo false, pq a herança me obriga a preencher uma propriedade q está na classe Pai que é obrigatorio, e não tenho a necessidade de usar essa propriedade ate o momento.
como resolver esse problema ?
muito obrigado.
Respostas
-
Isso é normal. Quando você passa de o model de um ActionResult para outro, ele não persiste as informações.
O que você precisa fazer, é colocar na view, como hiddenfield, os campos que você não quer alterar, mas que são obrigatórios.
- Marcado como Resposta _Manigold_ terça-feira, 19 de maio de 2015 12:50
-
Eu também achei estranho no início, mas depois você se acostuma. Você realmente precisa passar todos os valores requeridos para o ModelState ser válido.
- Marcado como Resposta _Manigold_ terça-feira, 19 de maio de 2015 12:50
-
Esses valores estão preenchidos no banco de dados? verifica se na sua base de dados ou quando você passa eles pra view, eles estão preenchidos.
- Marcado como Resposta _Manigold_ terça-feira, 19 de maio de 2015 17:49
-
Se é um insert, enão obrigatoriamente você precisa passar um valor pra esses campos, pois eles devem estar marcado como not null na sua base de dados.
Nesse caso, ou você utiliza o hiddenfield pra preencher o valor de forma estática, exemplo: value="x". Ou, como são strings, você coloca eles para serem preenchidos por textbox, usando o @Html.TextBoxFor
Caso esses campos não sejam obrigatórios, tire o required deles.
- Marcado como Resposta _Manigold_ terça-feira, 19 de maio de 2015 17:49
Todas as Respostas
-
-
Mais simples ainda, ou seja em minha classe financeiro tenho as propriedades, logo abaixo:
o problema que as vezes não uso todas as propriedades, e la no meu controller ocorre o seguinte: if (ModelState.IsValid) "FALSE" "
Sempre vem como false,pq ele me obriga a passar um "valor" para todos que estão como "REQUIRED".
public class FinanceiroMod
{
[Required(ErrorMessage = "Grupo é obrigatório")]
public string Grupo { get; set; }
[Required(ErrorMessage = "Tipo é obrigatório")]
public string FixoVariavel { get; set; }
public string Obs { get; set; }
public bool Situacao { get; set; }
[Required(ErrorMessage = "Data de emissão obrigaório")]
[Display(Name = "Data de emissão")]
[DataType(DataType.Date, ErrorMessage = "Data em formato inválido")]
public DateTime DataEmissao { get; set; }
[Required(ErrorMessage = "Data de vencimento obrigatório")]
[Display(Name = "Data de vencimento")]
[DataType(DataType.Date, ErrorMessage = "Data em formato inválido")]
public DateTime DataVencimento { get; set; }
[Required(ErrorMessage = "Valor é obrigatório")]
public decimal? Valor { get; set; }
public int Parcela { get; set; }
public int QdeParcela { get; set; }
}
- Editado _Manigold_ terça-feira, 19 de maio de 2015 12:25
-
Isso é normal. Quando você passa de o model de um ActionResult para outro, ele não persiste as informações.
O que você precisa fazer, é colocar na view, como hiddenfield, os campos que você não quer alterar, mas que são obrigatórios.
- Marcado como Resposta _Manigold_ terça-feira, 19 de maio de 2015 12:50
-
-
Eu também achei estranho no início, mas depois você se acostuma. Você realmente precisa passar todos os valores requeridos para o ModelState ser válido.
- Marcado como Resposta _Manigold_ terça-feira, 19 de maio de 2015 12:50
-
-
-
-
-
-
-
-
-
-
-
-
-
sim estao.
<script>
$(function () {
$("#dataemissao,#datavencimento").datepicker({
dateFormat: 'dd/mm/yy',
dayNames: ['Domingo', 'Segunda', 'Terça', 'Quarta', 'Quinta', 'Sexta', 'Sábado'],
dayNamesMin: ['D', 'S', 'T', 'Q', 'Q', 'S', 'S', 'D'],
dayNamesShort: ['Dom', 'Seg', 'Ter', 'Qua', 'Qui', 'Sex', 'Sáb', 'Dom'],
monthNames: ['Janeiro', 'Fevereiro', 'Março', 'Abril', 'Maio', 'Junho', 'Julho', 'Agosto', 'Setembro', 'Outubro', 'Novembro', 'Dezembro'],
monthNamesShort: ['Jan', 'Fev', 'Mar', 'Abr', 'Mai', 'Jun', 'Jul', 'Ago', 'Set', 'Out', 'Nov', 'Dez'],
nextText: 'Próximo',
prevText: 'Anterior',
mask: '9999-99-99'
});
});
</script>
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
<h4 class="modal-title" id="myModalLabel">Cadastro</h4>
</div>
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
@Html.ValidationSummary(true)
<div role="tabpanel">
<!-- Nav tabs -->
<ul class="nav nav-tabs" role="tablist">
<li class="active"><a href="#home" aria-controls="home" role="tab" data-toggle="tab">Grupo</a></li>
</ul>
<!-- Tab panes -->
<div class="tab-content">
<div role="tabpanel" class="tab-pane active" id="home">
<div class="modal-body">
<div class="form-horizontal">
<div class="form-group">
<div class="col-sm-9">
<label>Grupo</label>
@Html.DropDownListFor(x => x.CodigoGrupo,
ViewBag.Grupo as SelectList, new { @id = "grupo", @class = "form-control" })
</div>
</div>
<div class="form-group">
<div class="col-sm-9">
<label>Descrição</label>
@Html.TextBoxFor(model => model.Obs, new { @id = "obs", @class = "form-control" })
</div>
</div>
<div class="form-group">
<div class="col-sm-9">
<label>Valor</label>
@Html.TextBoxFor(model => model.Valor, new { @id = "valor", @class = "form-control" })
</div>
</div>
<div class="form-group">
<div class="col-sm-9">
<label>Parcela(s)</label>
@Html.TextBoxFor(model => model.Parcela, new { @id = "parcela", @class = "form-control" })
</div>
</div>
<div class="form-group">
<div class="col-sm-9">
<label>Qtde Parcelas</label>
@Html.TextBoxFor(model => model.QdeParcela, new { @id = "qteparcela", @class = "form-control" })
</div>
</div>
<div class="form-group">
<div class="col-sm-9">
<label>Situação</label>
@Html.DropDownListFor(model => model.Situacao, new SelectList(new List<Object>
{
new {Value="true", Text="Pago"},
new {Value="false", Text="Não pago"},
},
"Value", "Text"), new { @id = "status", @class = "form-control" })
</div>
</div>
<div class="form-group">
<div class="col-sm-9">
<label>Data emissão</label>
@Html.TextBoxFor(model => model.DataEmissao, new { @id = "dataemissao", @onkeypress = "mascara(this,data)", @maxlength = "10", @class = "form-control" })
</div>
</div>
<div class="form-group">
<div class="col-sm-9">
<label>Data vencimento</label>
@Html.TextBoxFor(model => model.DataVencimento, new { @id = "datavencimento", @onkeypress = "mascara(this,data)", @maxlength = "10", @class = "form-control" })
</div>
</div>
<div>
@Html.HiddenFor(model => model.FixoVariavel, new { @value = string.Empty })
@Html.HiddenFor(model => model.Grupo, new { @value = string.Empty})
</div>
</div>
</div>
</div>
</div>
</div>
<div class="modal-footer">
<span id="progress" class="text-center" style="display: none;">
<img src="~/Content/images/loading.gif" alt="wiat" />
</span>
<input class="btn btn-success" type="submit" value="Salvar" />
<button class="btn btn-danger" data-dismiss="modal">Cancelar</button>
</div>
}
@Scripts.Render("~/bundles/jqueryval")
-
-
-
-
@Html.HiddenFor(model => model.FixoVariavel) @Html.HiddenFor(model => model.Grupo)
- Editado alexandre_cavaleiro terça-feira, 19 de maio de 2015 14:10 erro
-
-
Esses valores estão preenchidos no banco de dados? verifica se na sua base de dados ou quando você passa eles pra view, eles estão preenchidos.
- Marcado como Resposta _Manigold_ terça-feira, 19 de maio de 2015 17:49
-
-
Se é um insert, enão obrigatoriamente você precisa passar um valor pra esses campos, pois eles devem estar marcado como not null na sua base de dados.
Nesse caso, ou você utiliza o hiddenfield pra preencher o valor de forma estática, exemplo: value="x". Ou, como são strings, você coloca eles para serem preenchidos por textbox, usando o @Html.TextBoxFor
Caso esses campos não sejam obrigatórios, tire o required deles.
- Marcado como Resposta _Manigold_ terça-feira, 19 de maio de 2015 17:49
-
-
Vejá aqui como você pode ignorar determinadas propriedades de sua Classe
http://www.codigoexpresso.com.br/Home/Postagem/34
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:23
-
Desculpe agora que entendi seu problema, quando uma string vier vazia ou "" ou empty, ela vai retornar em sua classe como nula mesmo, pasta tratar e corririr o valor nulo para "" quando receber a classe modelo
Se foi útil e/ou resolveu seu problema, não esqueça de marcar como resposta.
Visite : www.codigoexpresso.com.br