如何使用jQuery改变事件的下拉列表填充的控制器使用一个ActionResult另一个下拉列表(H

2019-11-01 19:16发布

我试图用一个下拉的更改事件调用在我的控制器一个ActionResult以填充另一个下拉。

下面是我试过了jQuery:

 $(function () {
        $('#CertificationId').change(function () {
            var data = {
                certificationId: $('#CertificationId').val()

            };

            var certificationId = $('#CertificationId').val();
//            $.post('@Url.Action("AjaxGetCourseOptions", "WorkerCertifications")', {certificationId : certificationId}, $(this).parents('form:first').serialize(), function (data) {
//                //$('#form').children().remove().append(data);
//            }, 'html');

//            var url = '@Url.Action("AjaxGetCourseOptions", "WorkerCertifications")';
//            var certificationId = $('#CertificationId').val();
//            $.post(url, { certificationId: certificationId }, 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;
        });
    });

下面是从控制器的代码:

public ActionResult AjaxGetCourseOptions( string certificationId )
    {
        var viewData = new WorkerCertificationViewModel
        {
            //CourseOptions = ScheduledCourse.GetActive().ToSelectList(x => x.Id, x => x.Id),
            CourseOptions = ScheduledCourse.GetAvailableCourses(Convert.ToInt64(certificationId)).ToSelectList(x => x.Id, x => x.Id)

        };

        viewModel.CourseOptions = viewData.CourseOptions;

        return Json( new {message = "Test"},
                     JsonRequestBehavior.AllowGet
            );
    }

我似乎无法得到jQuery来调用控制器中的代码。 我怎样才能做到这一点?

更新

我仍然有得到这个工作的问题。 这是页面的下拉菜单中更改事件触发之前的URL http://mylocalhost.com/camms/WorkerCertifications/Insert/SysAdmin/Worker/Certifications/14843

变化事件触发后,我有我想要发布到一个硬编码(现在)的URL,但它变得追加到当前URL。 任何想法如何解决这一问题? 这是它试图张贴到网址: http://mylocalhost.com/camms/WorkerCertifications/Insert/SysAdmin/Worker/Certifications/camms/WorkerCertifications/AjaxGetCourseOptions/SysAdmin/Worker/Certifications/14843/?certificationId=10916

该网址应该是这样的: http://mylocalhost.com/camms/WorkerCertifications/AjaxGetCourseOptions/SysAdmin/Worker/Certifications/14843/?certificationId=10916

我不得不删除本地主机和端口,以保存该更新。

Answer 1:

我做到了这一点通过以下事项:

jQuery的:

$(function () {
    $('#CertificationId').change(function (evt) {
        var data = {
            certificationId: $('#CertificationId').val()

        };

        var certificationId = $('#CertificationId').val();
        $.ajax({
            //url: "/camms/WorkerCertifications/GetCourseOptions/SysAdmin/Worker/Certifications/14843",
            url: window.location.href.replace('Insert', 'GetCourseOptions'),
            type: 'POST',
            data: { certificationId: certificationId },
            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('<option value="' +
                            courseOptions[i].Value + '">' + courseOptions[i].Text + '</option>');
                    }
                    $select.append(listItems.join(''));
                }

                //                    $.each(courseOptions, function (i, option) {
                //                        $('<option>', {
                //                            value: option.Id
                //                        }).html(option.Id).appendTo($select);
                //                    });
            }
        });

        return false;
    });
});

在控制器:

[HttpPost]
    public JsonResult GetCourseOptions( string certificationId = "0")
    {
        var list = ScheduledCourse.GetAvailableCourses(Convert.ToInt64(certificationId)).ToSelectList(x => x.ScheduledCourseId, x => x.ScheduledCourseId);

        var result = new JsonResult();

        result.Data = list.ToList();

        return result;
    }


Answer 2:

在我的申请,我填充下拉列表如下:

有两个下拉列表工种和岗位。 一旦你选择一个作业类别的作业列表被填充。

     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 += "<option value=\"" + item.values + "\">" + item.texts  + "</option>";
                } );

                $( '#JobID' ).html( items );
            }
        } );
    }

    $( '#JobCatID' ).change( function ()
    {
        ListingJobs();
    } );

而在你的控制器,你必须提供一个值,名称对转换成JSON。



文章来源: How to use jQuery change event on dropdownlist to populate another dropdownlist using an ActionResult in the Controller