0
Please, can someone tell me how to use the @Html.Validationmessagefor for a @Html.Dropdownlistfor? Assuming the user has triggered the option to write from the system screen he should inform that the field is required; instead, the system is showing an error:
Value cannot be null. Name of parameter: source
It seems that when performing the post the Viewbag is null and so instead of calling the Vilidationmessagefor it informs the above error!
Thanks for all your help!
View
@Html.ValidationSummary(true)
<label for="lblTratamento">Tratamemto <i style = "color:red;">*</i></label>
@Html.DropDownListFor(model => model.Tratamento,
((IEnumerable<TratamentoModel>)ViewBag.Tratamento).Select(tratamento => new SelectListItem
{
Text = tratamento.DescricaoTratamento,
Value = tratamento.DescricaoTratamento,
Selected = (Model != null) && (Model.Tratamento == tratamento.DescricaoTratamento)
}), "Escolha um Tratamento", new { @class = "form-control select2 left cmb-treatment", @id = "ddlTratamento" })
@Html.ValidationMessageFor(model => model.Tratamento, String.Empty, new { @style = "color:red;!important" })
Model
public class PessoaFisicaModel
{
[Required(ErrorMessage = "Selecione um tratamento.", AllowEmptyStrings = false)]
public string Tratamento { get; set; }
}
Class (Negocio)
public class TratamentoClass
{
public List<T> ObtemListaTratamento<T>() where T : ITratamento, new()
{
ModelagemDados db = new ModelagemDados();
try
{
var listaTratamento = db.Tratamento.Select(
x => new T()
{
CodigoTratamento = x.CodigoTratamento,
DescricaoTratamento = x.DescricaoTratamento
}).ToList();
return listaTratamento;
}
catch (DbEntityValidationException dbEx)
{
foreach (var validationErrors in dbEx.EntityValidationErrors)
{
foreach (var validationError in validationErrors.ValidationErrors)
{
Trace.TraceInformation("Property: {0} Error: {1}",
validationError.PropertyName,
validationError.ErrorMessage);
}
}
throw;
}
}
Controller
[HttpPost]
public ActionResult GravarPessoaFisica(PessoaFisicaModel pessoafisica)
{
PessoaFisicaClass _pessoaFisica = new PessoaFisicaClass();
try
{
if (ModelState.IsValid)
{
var retorno = _pessoaFisica.GravarPessoaFisica(pessoafisica);
if (retorno != 0)
{
return RedirectToAction("Index", "CadastroCliente");
}
ViewBag.Message = "Erro: Por favor, reporte o ocorrido ao administrador do sistema";
}
return View("CadastrarCliente", pessoafisica);
}
catch (DbEntityValidationException dbEx)
{
foreach (var validationErrors in dbEx.EntityValidationErrors)
{
foreach (var validationError in validationErrors.ValidationErrors)
{
Trace.TraceInformation("Property: {0} Error: {1}",
validationError.PropertyName,
validationError.ErrorMessage);
}
}
return ViewBag.Message == "Contate o administrador do sistema, Erro: " + dbEx.Message.ToString();
}
}
Controller (Data Load Controller)
public ActionResult CadastrarCliente(string user)
{
var retornoEstado = new EstadoClass().ObtemLista<EstadoModel>();
var retornoCidadeIbge = new CidadeIbgeClass().ObtemLista<CidadeIbgeModel>();
var retornoBanco = new BancoClass().ObtemLista<BancoModel>();
var retornoSitucao = new SituacaoClass().ObtemLista<SituacaoModel>();
var retornoOrgao = new OrgaoClass().ObtemListaOrgao<OrgaoModel>();
var retornoLotacao = new LotacaoClass().ObtemListaLotacao<LotacaoModel>();
var retornoTratamento = new TratamentoClass().ObtemListaTratamento<TratamentoModel>();
var retornoEstadoCivil = new EstadoCivilClass().ObtemLista<EstadoCivilModel>();
var retornoTipoTelefone = new TipoTelefoneClass().ObtemLista<TipoTelefoneModel>();
var retornoCargo = new CargoClass().ObtemLista<CargoModel>();
ViewBag.Estado = retornoEstado;
ViewBag.CidadeIbge = retornoCidadeIbge;
ViewBag.Banco = retornoBanco;
ViewBag.Situacao = retornoSitucao;
ViewBag.Orgao = retornoOrgao;
ViewBag.Lotacao = retornoLotacao;
ViewBag.Tratamento = retornoTratamento;
ViewBag.EstadoCivil = retornoEstadoCivil;
ViewBag.TipoTelefone = retornoTipoTelefone;
ViewBag.Cargo = retornoCargo;
return View();
}
You just want to put the message of
required
when submitting the form or message returned from the server (the one that is usually red)?– Randrade
How is the Action of Controller receiving the data to be validated?
– Leonel Sanches da Silva
Randrade and Gypsy Morrison Mendez thank you very much for answering, I updated the question, I also identified that it seems that the Viewbag that I am using to load the Dropdownlist is null when the record button that performs post in the form is triggered. Thanks again!
– Wilians Martins