Вопрос по jquery, post, asp.net – jQuery AJAX - вызов для публикации данных на странице ASP.Net (не Get, а POST).

19

У меня есть следующий jQuery AJAX-вызов на страницу ASP.Net.

             $.ajax({
                async: true,
                type: "POST",
                url: "DocSummaryDataAsync.aspx", //"DocSummary.aspx/GetSummaryByProgramCount",
                contentType: "application/json; charset=utf-8",
                data: kendo.stringify({ vendorId: supplierId, businessUnit: busUnit, productSegmentId: prodSegmentId, programId: progId, productManagerId: prodManagerId, companyIds: compIds, expired: exp.toString(), requestType: 'TotalCount' }),
                success: function (msg) {
                    // alert('in success of getcount');

                },
                error: function (XMLHttpRequest, textStatus, errorThrown) {
                    // alert('in failure of getcount');


                }
            });

Когда я пытаюсь извлечь из объекта запроса опубликованные данные, он не отображается. Мой код страницы aspx, как показано ниже. Я отправляю на страницу все опубликованные данные в формате Json, но это не так.не отображается в коде позади страницы.Есть ли какие-то дополнительные настройки в jQuery ajax call, которые мне не хватает?

   protected void Page_Load(object sender, EventArgs e)
    {
        Response.ContentType = "application/json";

        string requestType = Request.Params["requestType"];


        //populate variables from posted data
        string vendorId = Request.Params["vendorId"];
        string businessUnit = Request.Params["businessUnit"];
        string productSegmentId = Request.Params["productSegmentId"];
        string commitmentProgramId = Request.Params["programId"];
        string productManagerId = Request.Params["productManagerId"];
        string companyIds = Request.Params["companyIds"];
        string expired = Request.Params["expired"];
     }

ОБНОВЛЕНИЕ 1: Стивен'Ответ s - лучший подход к этому, особенно подход, который делает ProcessRequest. Однако я обнаружил небольшую хитрость, которая позволит размещать данные в ASP.Net обычным традиционным способом, например, как Request ["VendorID»] и т. д. Чтобы включить такую публикацию данных из любого запроса jQuery ajax, вам просто нужно убедиться, что к вашему вызову jQuery ajax применяются следующие 2 пункта:

Тип содержимого должен быть исключен из вашего вызова jQuery ajax Или если вы хотите включить его, то он долженне быть установлен на "Применение / JSON; кодировка = UTF-8" но "применение / х-WWW-форм-urlencoded; кодировка = UTF-8", Тип содержимого, согласно моему пониманию, говорит странице ASP.Net тип отправляемых данных, а не тип ожидаемых данных страницы.Часть данных jQuery ajaxне должны содержать имена данных, заключенные в кавычки, Итак, данные: {"venorId ":"AD231" ,»businessUnit ":"123"} должен быть заменен данными: {vendorId: "AD231", BusinessUnit:»123"}. В этом примере имена данных являются vendorId и businessUnit, к которым можно получить доступ в коде позади вашего ASP.Net, используя обычный синтаксис ASP.Net, например Request ["VendorID»] и запрос ["businessUnit»].
Я тоже так пробовал, ничего нея не работаю Может кто-нибудь мне помочь. user1120998

Ваш Ответ

1   ответ
32

Сохраняйте код на стороне сервера таким же

Сначала удалитеkendo.stringify, Затем либо удалите contentType, либо измените его на ...

"application/x-www-form-urlencoded; charset=utf-8" 

... или измените ваш вызов $ .ajax на этот:

$.post('DocSummaryDataAsync.aspx', { vendorId: supplierId, businessUnit: busUnit, productSegmentId: prodSegmentId, programId: progId, productManagerId: prodManagerId, companyIds: compIds, expired: exp.toString(), requestType: 'TotalCount' }, function (data) { });

Вариант 2Измените ПОСТ на ПОЛУЧИТЬ

Как это

$.ajax({
async: true,
type: "GET",
etc.

Это передаст ваши данные через QueryString. Если вы удалитеkendo.stringify Вызов бы вы получили доступ ко всем значениям, как это:

string vendorId = Request.QueryString[0];
string businessUnit = Request.QueryString[1];
etc.

Вариант 3Используйте свой исходный вызов $ .ajax

Если вы используете исходный $ .ajax, то применимо следующее:

Request.Params получает "объединенный набор элементов QueryString, Form, Cookies и ServerVariables. "-эта ссылка

Вы не работаете ни с одним из них. Вместо этого вам нужно получить доступ к Request.InputStream.

Вот'Как вы можете это сделать:

Создайте класс на стороне сервера, который отображается на запрошенный объект JSON, например,

public class MyClass
{
    // The type (int or string) should probably correspond to the JSON
    public int vendorId { get; set; }
    public string businessUnit { get; set; }
    public string productSegmentId { get; set; }
    public string programId { get; set; }
    public string productManagerId { get; set; }
    public string companyIds { get; set; }
    public string expired { get; set; }
    public string requestType { get; set; }
}

Преобразуйте Request.InputStream в этот тип, и тогда вы сможете его использовать.

public void ProcessRequest()
{
    System.IO.Stream body = Request.InputStream;
    System.Text.Encoding encoding = Request.ContentEncoding;
    System.IO.StreamReader reader = new System.IO.StreamReader(body, encoding);
    string json = reader.ReadToEnd();
    JavaScriptSerializer serializer = new JavaScriptSerializer();
    MyClass myclass = (MyClass)serializer.Deserialize(json, typeof(MyClass));
    int vendorId = myclass.vendorId;
    string requestType = myclass.requestType;
    // etc...
}

protected void Page_Load(object sender, EventArgs e)
{
    ProcessRequest();
}
GET передает его через QueryString. Тот'почему вы можете получить к нему доступ через Request.Params. Stephen Oberauer
Привет Сунил. Я'Мы обновили мой ответ информацией из ваших комментариев. Хорошего вам нового года :) Stephen Oberauer
Стивен - Спасибо. Ты гений. Я надеюсь, что смогу дать вам миллион очков за этот ответ. Это дает мне то, что мне было нужно. Sunil
@ Сина Рад слышать это :) Stephen Oberauer

Похожие вопросы