JQuery использует Json для вызова Controller / Action - PullRequest
2 голосов
/ 13 апреля 2009

У меня есть страница поиска, где в верхней части страницы находятся критерии поиска с кнопкой поиска. В нижней части экрана показаны результаты нажатия кнопки поиска. В этом случае у меня есть 6 различных критериев поиска, которые пользователь может ввести. Я хотел бы объединить все критерии в один класс, чтобы мое действие Controller могло читать объект Json как класс. Используя FireBug, я вижу, что мой Json собран правильно. Используя отладчик, я знаю, что мой контроллер / действие запускается. Однако когда я смотрю на объект класса с отладчиком в Controller / Action, все свойства равны нулю или нулю.

Вот мой контроллер ... [AcceptVerbs (HttpVerbs.Post)] public ActionResult GetStudentByCritera (StudentSearchCriteraCV critera) { // Получить данные ViewData ["MainData"] = studentBLLHdl.StudentFind (critera); возврат View (); }

Вот JavaScript / JQuery, который вызывает контроллер ... функция LoadResultTable () { // строим объект Json для отправки var dataToSend = BuildJson ()

        $.ajax({
            url: "GetStudentByCritera",
            type: 'POST',
            data: dataToSend,
            dataType: 'json',
            contentType: "application/json; charset=utf-8", 
            beforeSend: ClientSideValidate,
            success: function(result) 
            {
                alert(result.Result);
                $('#SearchResult').html(result.Result).show();
                // UnBlock UI
            },
            error: function (XMLHttpRequest, textStatus, errorThrown) 
            {
                // UnBlock UI

                // not sure how to handel error
                alert("error happen when posting to 'GetStudentByCritera'")

                // typically only one of textStatus or errorThrown 
                // will have info
                this; // the options for this ajax request
            }


        });
    }

    function BuildJson()
    {
        // building Json            

        var dataForClass = { "StudentSearchCriteraCV" : [{
            "StudLname": $("input[name='StudentSearchCriteraCV.StudLname']").val(),
            "StudFname": $("input[name='StudentSearchCriteraCV.StudFname']").val(),
            "Ssn": $("input[name='StudentSearchCriteraCV.Ssn']").val(),
            "StudId": $("input[name='StudentSearchCriteraCV.StudId']").val(),
            "Sex": $("input[name='StudentSearchCriteraCV.Sex']").val(),
            "Race": $("input[name='StudentSearchCriteraCV.Race']").val()
            }]};

        return $.toJSON(dataForClass );
     }

    function ClientSideValidate() 
    { 
        // Block the UI
        alert( "In the ClientSideValidate" );

        // if error UNBlock UI
        // return true if client side data is good.

        return true; 
    } 


</script>

Ответы [ 3 ]

3 голосов
/ 14 апреля 2009

Ваш вызов ajax - это просто асинхронный HTTP-пост, поэтому параметром данных могут быть только пары ключ-значение, но не объект JSON. Если вы сгладите dataForClass, он будет работать.

2 голосов
/ 13 апреля 2009

Вам необходимо создать фильтр действий, унаследованный от ActionFilterAttribute. Посмотрите здесь http://forums.asp.net/t/1237429.aspx или здесь http://www.c -sharpcorner.com / Blogs / BlogDetail.aspx? BlogId = 863 для получения дополнительной информации о том, как построить это.

0 голосов
/ 14 апреля 2009

Я считаю, что ваше значение JSON должно быть в кавычках, если это не число.

"StudFname": '"' + $("input[name='StudentSearchCriteraCV.StudFname']").val() + '"',

Я не использовал .toJSON (), но я считаю, что он превращает ваш объект JSON в строку. Поскольку вы создаете свой объект просто для того, чтобы сразу превратить его в строку, почему бы не создать его как строку для начала? Это то, что я сделал, когда столкнулся с этой проблемой (отладчик показывает нули для значений.)

var dataForClass = '{ "StudentSearchCriteraCV" : [{ ' +
        '"StudLname": "' + $("input[name='StudentSearchCriteraCV.StudLname']").val() + '", ' +
        '"StudFname": "' + $("input[name='StudentSearchCriteraCV.StudFname']").val() + '", ' +
        '"Ssn": "' + $("input[name='StudentSearchCriteraCV.Ssn']").val() + '", ' +
        '"StudId": ' + $("input[name='StudentSearchCriteraCV.StudId']").val() + ', ' + //assuming StudID is a number
        '"Sex": "' + $("input[name='StudentSearchCriteraCV.Sex']").val() + '", ' +
        '"Race": "' + $("input[name='StudentSearchCriteraCV.Race']").val() +'" ' +
        '}]}';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...