Hi Kmcnet
A whole working demo you could follow:
Model
public class Test
{
public string Diagnosis { get; set; }
public string Description { get; set; }
public string Code { get; set; }
}
View
<ul>
<li>
<input id="diagnsosi1" name="diagnosis1" class="searchinput" />
<input id="diagnsosi1code" name="diagnosis1code" />
<input id="diagnsosi1codedescription" name="diagnosis1codedescription" />
</li>
<li>
<input id="diagnsosi2" name="diagnosis2" class="searchinput" />
<input id="diagnsosi2code" name="diagnosis2code" />
<input id="diagnsosi2codedescription" name="diagnosis2codedescription" />
</li>
<li>
<input id="diagnsosi3" name="diagnosis3" class="searchinput" />
<input id="diagnsosi3code" name="diagnosis3code" />
<input id="diagnsosi3codedescription" name="diagnosis3codedescription" />
</li>
</ul>
@section Scripts{
<link rel="stylesheet" href="https://code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
<script src="https://code.jquery.com/jquery-1.12.4.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
<script>
$(document).ready(function () {
$(".searchinput").autocomplete({
source: function (request, response) {
// AJAX call to fetch data from the server
$.ajax({
url: "/home/search",
type: "GET",
dataType: "json",
data: { term: request.term },
success: function (data) {
// Process and format the response data
response($.map(data, function (item) {
return {
label: item.diagnosis, // Display diagnosis name in the dropdown
value: item.diagnosis + "|" + item.code + "|" + item.description
};
}));
}
});
},
select: function (event, ui) {
const result = ui.item.value.split("|");
const diagnosis = result[0];
const code = result[1];
const description = result[2];
$(this).val(diagnosis); // Populate diagnosis input
// Get the index from the ID
const index = $(this).attr("id").match(/\d+/)[0];
// Populate corresponding code and codedescription fields
$("#diagnsosi" + index + "code").val(code);
$("#diagnsosi" + index + "codedescription").val(description);
return false;
}
});
});
</script>
}
Controller
[HttpGet]
public IActionResult Search(string term)
{
// Example data; replace with database query
var diagnoses = new List<Test>
{
new Test{ Diagnosis = "Diagnosis A", Code = "CodeA", Description = "Description A" },
new Test{ Diagnosis = "Diagnosis B", Code = "CodeB", Description = "Description B" },
};
var results = diagnoses
.Where(d => d.Diagnosis.Contains(term, StringComparison.OrdinalIgnoreCase))
.ToList();
return Ok(results);
}
Besides, the value of id and name in the same input are different but similar, be sure do not misspell. Or you can change them with quite different value.
If the answer is the right solution, please click "Accept Answer" and kindly upvote it. If you have extra questions about this answer, please click "Comment".
Note: Please follow the steps in our documentation to enable e-mail notifications if you want to receive the related email notification for this thread.
Best regards,
Rena