asp.net mvc 3 comment utiliser l’événement jquery change sur la liste déroulante pour remplir une autre liste déroulante à l’aide d’un ActionResult dans le contrôleur

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; }