I have DroDownList
that lists names of Patients. I need to allow the user to enter the Patient "Name" directly inside the DropDownList and when entering the Patient Name the system will execute the search.
HTML
<p><button type="button" id="btnNovoProduto" class="btn btn-primary btn-sm">NOVO PRODUTO</button></p>
<div class="modal fade" id="modalProduto" role="dialog">
<div class="modal-dialog">
<!-- Modal content-->
<div class="modal-content">
<div class="modal-header bg-info">
<button type="button" class="close" data-dismiss="modal">×</button>
<h3>PRODUTO</h3>
</div>
<div class="modal-body">
<fieldset>
<div class="row">
<div class="col-md-12">
<div class="col-md-8">
<select id="ddlJquery" class="form-control input-sm">
<option value="0">SELECIONE</option>
</select>
</div>
</div>
</div>
<div class="row">
<div class="col-md-12">
<div class="col-md-8">
<input type="text" id="NomeDoPaciente" value="" class="form-group-sm" />
</div>
</div>
</div>
</fieldset>
JavaScript
@section Scripts {
<script src="~/Scripts/select2.full.min.js"></script>
<script type="text/javascript">
$(document).ready(function () {
$('#btnNovoProduto').on('click', function () {
ListarJQUERY();
$("#modalProduto").modal({ backdrop: false });
});
function ListarJQUERY() {
$.ajax({
url: "/Administrativo/Produto/BuscarAllProduto",
type: "post",
dataType: "json",
contentType: "application/json; charset=utf-8",
processData: false,
data: null,
beforeSend: function () {
$("#divCarregando").show();
},
complete: function () {
$("#divCarregando").hide();
},
success: function (data) {
$('#ddlJquery').empty();
$('#ddlJquery').append('<option value="0">SELECIONE</option>');
$.each(data.lstSubTipo, function (i, subTipo) {
$('#ddlJquery').append('<option value=' + subTipo.TBPRODUTOID + '>' + subTipo.DSPRODUTO + '</option>');
});
},
error: function (result) {
alert(result.responseText);
}
});
$("#ddlJquery").select2({
allowClear: true,
ajax: {
type: 'GET',
url: '/Produto/BuscarParteProduto',
data: function (params) {
return {
id: 'e'//params.term
};
},
dataType: 'json',
processResults: function (data) {
return {
results: data
};
}
},
initSelection: function (element, callback) {
var id = $(element).val();
if (id) {
var url = '/Produto/BuscarParteProduto';
$.ajax(url + '/' + id, {
dataType: "json"
}).done(function (data) {
callback({ 'pNome': id, 'text': $('#NomeDoPaciente').val() })
});
console.log("passei");
} else {
callback({ 'pNome': $('#NomeDoPaciente').val(), 'text': $('#NomeDoPaciente').val() })
}
}
});
};
});
</script>
}
CONTROLER
public JsonResult BuscarParteProduto(string pNome)
{
try
{
List<TBProduto> lProdutoFiltrado = new List<TBProduto>();
List<TBProduto> lTotalProduto = ObterListaProduto();
if (!string.IsNullOrWhiteSpace(pNome))
{
lProdutoFiltrado = lTotalProduto.Where(x => x.DSPRODUTO.ToUpper().Contains(pNome.ToUpper())).ToList<TBProduto>();
}
else
{
lProdutoFiltrado = lTotalProduto.ToList();
}
return Json(lProdutoFiltrado.Select(x => new
{
id = x.TBPRODUTOID,
text = String.IsNullOrWhiteSpace(x.DSPRODUTO) ? "" : x.DSPRODUTO,
}), JsonRequestBehavior.AllowGet);
}catch(Exception){
throw;
}
}
public JsonResult BuscarAllProduto()
{
try
{
List<TBProduto> lTotalProduto = ObterListaProduto();
List<TBProduto> lProdutoFiltrado = new List<TBProduto>();
lProdutoFiltrado = lTotalProduto.ToList();
return Json(new { lstSubTipo = lProdutoFiltrado.ToList() }, JsonRequestBehavior.AllowGet);
}
catch (Exception)
{
throw;
}
}