次の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呼び出しに追加の設定はありますか?
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"];
}
PDATE 1: Stephenの答えは、これに対する最善のアプローチ、特にProcessRequestを行うアプローチです。ただし、Request ["vendorId"]などの通常の従来の方法でデータをASP.Netに投稿できるようにする小さなトリックを見つけました。jQueryajaxリクエストからのデータの投稿を有効にするには、単に次の2点がjQuery ajax呼び出しに適用されていることを確認してください。
オプション1。サーバー側のコードを同じにしてください
最初に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.POSTをGETに変更
このような
$.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、Cookie、および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();
}