0

我正在尝试使用下拉列表的更改事件在我的控制器中调用 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

更改事件触发后,我有一个硬编码的(暂时)网址,我想发布到该网址,但它已附加到当前网址。知道如何解决这个问题吗?这是它试图发布到的网址: 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

我必须删除本地主机和端口才能保存此更新。

4

2 回答 2

0

在我的应用程序中,我正在填充这样的下拉列表:

有两个下拉列表工作类别和工作。一旦您选择了一个工作类别,工作列表就会被填充。

     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 的值-名称对。

于 2013-03-21T09:55:31.877 回答
0

我通过以下方式实现了这一点:

查询:

$(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;
    }
于 2013-03-22T18:46:36.593 回答