Please can someone tell me how to use the @Html.ValidationMessageFor for a @Html.DropDownListFor? Assuming that the user has triggered the option to save from the system screen he should inform that the field is mandatory; instead, the system is experiencing an error:
Value can not be null. Parameter name: source
It seems that when doing the post ViewBag is null and so instead of calling the VilidationMessageFor it informs the above error!
Thanks in advance for 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
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
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();
}