J’essaie d’utiliser l’événement de modification d’une liste déroulante pour appeler un ActionResult dans mon contrôleur afin de remplir une autre liste.
Voici le test que j’ai essayé:
$(function () { $('#CertificationId').change(function () { var data = { certificateionId: $('#CertificationId').val() }; var certificateionId = $('#CertificationId').val(); // $.post('@Url.Action("AjaxGetCourseOptions", "WorkerCertifications")', {certificateionId : certificateionId}, $(this).parents('form:first').serialize(), function (data) { // //$('#form').children().remove().append(data); // }, 'html'); // var url = '@Url.Action("AjaxGetCourseOptions", "WorkerCertifications")'; // var certificateionId = $('#CertificationId').val(); // $.post(url, { certificateionId: certificateionId }, function (result) { // alert('success'); // }); // $.getJSON('/WorkerCertifications/AjaxGetCourseOptions/SysAdmin/Worker/Certifications/14843/', data, function (result) { // alert(result.message); // }); $.getJSON('@Url.Action("AjaxGetCourseOptions", "WorkerCertifications")', data, function (result) { alert(result.message); }); // $.getJSON(this.href, data, function (result) { // alert(result.message); // }); return false; }); });
Voici le code du contrôleur:
public ActionResult AjaxGetCourseOptions( ssortingng certificateionId ) { var viewData = new WorkerCertificationViewModel { //CourseOptions = ScheduledCourse.GetActive().ToSelectList(x => x.Id, x => x.Id), CourseOptions = ScheduledCourse.GetAvailableCourses(Convert.ToInt64(certificateionId)).ToSelectList(x => x.Id, x => x.Id) }; viewModel.CourseOptions = viewData.CourseOptions; return Json( new {message = "Test"}, JsonRequestBehavior.AllowGet ); }
Je n’arrive pas à obtenir le code pour appeler le code dans le contrôleur. Quelqu’un a-t-il un exemple concret ou quelqu’un va-t-il me conseiller sur la manière de procéder?
Merci d’avance,
Nathan
Mise à jour: Vous rencontrez toujours un problème pour que cela fonctionne. Il s’agit de l’URL de la page avant le déclenchement de l’événement change pour la liste déroulante http://mylocalhost.com/camms/WorkerCertifications/Insert/SysAdmin/Worker/Certifications/14843.
Après le déclenchement de l’événement de changement, j’ai une URL codée en dur (pour le moment) que je veux publier, mais elle est ajoutée à l’URL actuelle. Une idée comment résoudre ce problème? Il s’agit de l’URL qu’il tente de publier sur: http://mylocalhost.com/camms/WorkerCertifications/Insert/SysAdmin/Worker/Certifications/camms/WorkerCertifications/AjaxGetCourseOptions/SysAdmin/Worker/Certifications/cams/14843/?certificateionId=1010
L’URL devrait ressembler à ceci: http://mylocalhost.com/camms/WorkerCertifications/AjaxGetCourseOptions/SysAdmin/Worker/Certifications/14843/?certificateionId=10916
J’ai dû supprimer l’hôte local et le port afin de sauvegarder cette mise à jour.
Merci encore,
Nathan
Dans mon application, je remplis la liste déroulante comme ceci:
Il existe deux listes déroulantes de catégories et d’emplois. Une fois que vous avez sélectionné une catégorie d’emploi, la liste des emplois est remplie.
function ListingJobs() { var job_ID = $( "#JobCatID" ).val(); $.ajax( { url: '@Url.Action("GetJobs")', data: { JobCatID: job_ID }, dataType: "json", type: "POST", error: function () { alert( "An error occurred." ); }, success: function ( data ) { var items = ""; $.each( data, function ( i, item ) { items += ""; } ); $( '#JobID' ).html( items ); } } ); } $( '#JobCatID' ).change( function () { ListingJobs(); } );
et dans votre contrôleur, vous devez une valeur, paire de nom convertie en json
J’ai accompli ceci par ce qui suit:
Jquery:
$(function () { $('#CertificationId').change(function (evt) { var data = { certificateionId: $('#CertificationId').val() }; var certificateionId = $('#CertificationId').val(); $.ajax({ //url: "/camms/WorkerCertifications/GetCourseOptions/SysAdmin/Worker/Certifications/14843", url: window.location.href.replace('Insert', 'GetCourseOptions'), type: 'POST', data: { certificateionId: certificateionId }, success: function (courseOptions) { // courseOptions is your JSON array var $select = $('#CourseId'); $select.children().remove(); if (courseOptions.length > 0) { var listItems = []; for (var i = 0; i < courseOptions.length; i++) { listItems.push(''); } $select.append(listItems.join('')); } // $.each(courseOptions, function (i, option) { // $('
Dans le contrôleur:
[HttpPost] public JsonResult GetCourseOptions( ssortingng certificateionId = "0") { var list = ScheduledCourse.GetAvailableCourses(Convert.ToInt64(certificateionId)).ToSelectList(x => x.ScheduledCourseId, x => x.ScheduledCourseId); var result = new JsonResult(); result.Data = list.ToList(); return result; }