I have a problem, I would like to populate my DropDownlistFor with the result of another DropDownListFor, so I'm using Ajax and Json, same concept they make when they want the result from State to City.
Model:
public class SegmentMOD
{
public int id { get; set; }
[DisplayName("Segmento")]
public string nome { get; set; }
}
public class SectorMOD
{
public int id { get; set; }
[DisplayName("Setor")]
public string nome { get; set; }
public int segmentId { get; set; }
}
Controller:
OpportunityController: Controller
{
public ActionResult Cadastrar()
{
//Aqui funciona normal, retorna os valores
ViewBag.segmentList = new SelectList(new SegmentREP().ListarTodos(),
"id",
"nome"
);
return View();
}
//vai preencher o Where com o Id do segment
public async Task<JsonResult> CarregarSector(int id)
{
var setor = new SectorREP().ListarTodos().Where(x => x.segmentId ==id);
return Json(setor, JsonRequestBehavior.AllowGet);
}
}
View:
@{
ViewBag.Title = "Cadastrar";
}
<script src="http://ajax.googleapis.com/ajax/libs/jquery/2.0.2/jquery.min.js"></script><script>$(document).ready(function(){$("#segment").change(function () {
listaCidade($(this).val());
});
});
//chamada ajax para a Action ListaCidade
//passando como parâmetro a Estado selecionado
function listaCidade(segmentId) {
//Chamando o metodo do controller para retornar um JSON
$.ajax({
url: '/Opportunity/CarregarSector',
type: 'POST',
data: { id: segmentId },
dataType: 'json',
success: function (result) {
$("#sector").empty();
$(result).each(function () {
//adicionando as opções de acordo com o retorno
$("#sector").append("<option value='" + this.id + "'>" + this.nome + "</option>");
});
},
error: function () {
alert('Erro! Não foi possível carregar os Setores.');
}
});
}
</script>
<h2>Cadastrar</h2>
<div class="col-md-4">
@Html.LabelFor(model => model.segment, htmlAttributes: new { @class = "control-label" })
@Html.DropDownListFor(model => model.segment, (SelectList)ViewBag.segmentList, new { @class = "form-control selectpicker show-tick", data_live_search = "true", id = "segment" })
@Html.ValidationMessageFor(model => model.segment, "", new { @class = "text-danger" })
<select class="form-control" id="sector"></select>
</div>