J'ai le jQuery suivant AJAX appel à une page 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');
}
});
Lorsque j'essaie de récupérer à partir de l'objet Request, les données publiées, elles ne s'affichent pas. Mon code de page aspx est comme ci-dessous. J'envoie chacune des données publiées au format Json à la page, mais elles n'apparaissent pas dans le code-derrière de la page. Y a-t-il un paramètre supplémentaire dans l'appel ajax jQuery qui me manque?
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"];
}
MISE À JOUR 1: La réponse de Stephen est la meilleure approche pour cela, en particulier l'approche qui fait ProcessRequest. Cependant, j'ai trouvé une petite astuce qui permettra de publier des données sur ASP.Net de la manière traditionnelle habituelle, c'est-à-dire comme Request ["vendorId"] etc. assurez-vous que les 2 points suivants sont appliqués à votre appel ajQuery jQuery:
Option 1. Gardez le même code côté serveur
Retirez d'abord le kendo.stringify. Supprimez ensuite le contentType ou changez-le en ...
"application/x-www-form-urlencoded; charset=utf-8"
... ou changez votre appel $ .ajax en ceci:
$.post('DocSummaryDataAsync.aspx', { vendorId: supplierId, businessUnit: busUnit, productSegmentId: prodSegmentId, programId: progId, productManagerId: prodManagerId, companyIds: compIds, expired: exp.toString(), requestType: 'TotalCount' }, function (data) { });
Option 2. Modifiez le POST en GET
Comme ça
$.ajax({
async: true,
type: "GET",
etc.
Cela transmettra vos données via QueryString. Si vous supprimez l'appel kendo.stringify, vous accéderiez à toutes les valeurs comme ceci:
string vendorId = Request.QueryString[0];
string businessUnit = Request.QueryString[1];
etc.
Option 3. Utilisez votre appel $ .ajax d'origine
Si vous utilisez votre $ .ajax d'origine, alors ce qui suit s'applique:
Request.Params obtient une "collection combinée d'éléments QueryString, Form, Cookies et ServerVariables". - ce lien
Vous ne travaillez avec aucun d'entre eux. Au lieu de cela, vous devez accéder à Request.InputStream.
Voici comment procéder:
Créez une classe côté serveur qui correspond à l'objet JSON demandé, par exemple.
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; }
}
Convertissez Request.InputStream dans ce type, puis vous pouvez l'utiliser.
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();
}