В сообщении AJAX на веб-сайте ASP.Net отсутствуют параметры - PullRequest
1 голос
/ 28 июля 2011

Я создал IHttpAsyncHandler, который я пытаюсь вызвать, используя AJAX, с помощью jQuery.Вызов выполнен успешно, но я не могу найти свои параметры на сервере.

Вот вызов AJAX:

function deleteViewModel(typename) {
    var data = {
        "viewModel": typename,
        "operation": "delete"
    };

    $.ajax({
        type: "POST",
        url: "<%= GetAppRoot() %>/viewModelGeneration.ashx",
        contentType: "application/json",
        cache: false,
        data: JSON.stringify(data),
        beforeSend: function (xhr, settings) {
            $("[id$=processing]").dialog();
        },
        success: function (data) {
            alert('Hey, I succeeded.');
        },
        error: function (xhr, status, err) {
            alert('Play a sad trombone and frown.');

        },
        dataType: "json"
    });
}

Вызов поступает на сервер и обрабатывается моим обработчиком, но я не вижу ни параметров viewModel, ни operationтам:

public void ProcessRequest(HttpContext context)
{
    // Problem is here - no parameters!
    var viewModelName = context.Request.Params["viewModel"];
    var operation = context.Request.Params["operation"];

    // Other stuff...

    GenerateResponse(context.Response, jsonResp);
}

Я открыл Fiddler, чтобы посмотреть на запрос, отправляемый клиентом, и мне кажется, что параметры включены:

POST http://localhost:4638/admin/viewModelGeneration.ashx HTTP/1.1
Host: localhost:4638
User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:5.0) Gecko/20100101 Firefox/5.0
Accept: application/json, text/javascript, */*
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip, deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Connection: keep-alive
Content-Type: application/json; charset=UTF-8
X-Requested-With: XMLHttpRequest
Referer: http://localhost:4638/admin/Admin/ResetViewModels.aspx
Content-Length: 123
Cookie: ASP.NET_SessionId=ifmof1ole4yv20jr0frqc0lk; .ASPXFORMSAUTH=836B7EEC539B1304126C156CA20A925DD4FF832E628C807A1CA9DCD00833BDFF36D73C39B9CCFE6EA15CF9FED95157A1CA5F07D588F04A8AFE68ABDBBA82FE9FF8507CB2B471340917616818334BCF0D958CB231A1CA3B9D91B05F2897C44663B5E86FC2FFDFE3C325AB66EC3124144F87B6FC8D3F6C7F92F2FEE745EA71EB333D18E35A7FFA992F8F52FEE509043236
Pragma: no-cache
Cache-Control: no-cache

{"viewModel":"Rds.ViewModels.Updaters.RegionViewModelUpdater, Rds.ViewModels","operation":"delete"}

I 'Я не уверен, что происходит, что они не попадают на сервер.Любые мысли будут оценены.

ОБНОВЛЕНИЕ:

Кто-то предложил мне, что Request.Params поддерживает только закодированные данные формы.Я обновил свой вызов AJAX на этом, но все еще нет параметров на стороне сервера:

function updateViewModel(typename, operation) {
    var parms = {
        "viewModel": typename,
        "operation": operation
    };

    $.ajax({
        type: "POST",
        url: "/admin/viewModelGeneration.ashx",
        contentType: "application/json",
        cache: false,
        data: parms,
        beforeSend: function (xhr, settings) {
                $("[id$=processing]").dialog();
        },
        success: onSuccess,
        error: onError
    });
}

Ответы [ 3 ]

3 голосов
/ 17 августа 2011

Он работает с данными в кодировке форм, но для этого вам нужно не только удалить dataType, но и свойство contentType. С этим вызовом успех:

function updateViewModel(typename, operation) {
    var parms = {
        "viewModel": typename,
        "operation": operation
    };

    $.ajax({
        type: "POST",
        url: "<%= GetAppRoot() %>/viewModelGeneration.ashx",
//      contentType: "application/json",
        cache: false,
        data: JSON.stringify(parms),
        beforeSend: function (xhr, settings) {
            $("[id$=processing]").dialog();
        },
        success: function (data) {
            alert('Hey, I succeeded.');
        },
        error: function (xhr, status, err) {
            alert('Play a sad trombone and frown.');
        }
//      dataType: "json"
    });
}
1 голос
/ 28 июля 2011

У меня была похожая проблема, из-за которой мне пришлось просто объявить

var dataString = JSON.stringify(data)

перед передачей dataString с помощью

data: dataString,

.По крайней мере, вы можете отладить скрипт в Firebug и убедиться, что dataString заполнен ожидаемым объектом.

0 голосов
/ 28 июля 2011

попробуй с

data:{viewModel:'typename',operation:'delete'},
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...