créer un gestionnaire HTTP générique, par exemple notre La liste des agences utilise ce code:
public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "text/javascript";
context.Response.ContentEncoding = Encoding.UTF8;
// Get User ID
int user_id;
try {
user_id = int.Parse(context.Session["user_id"].ToString());
} catch {
WriteErrorObject(context,"Could not find required user in the session.");
return;
}
// Get Query
string query;
try {
query = context.Request.QueryString["query"];
if (String.IsNullOrEmpty(query)) throw new Exception();
} catch {
query = "";
}
// Get Revision
int revision;
try {
revision = int.Parse(ConfigurationManager.AppSettings["reportingRevision"]);
} catch {
revision = -1;
}
// Check for our connection string
try {
if (ConfigurationManager.ConnectionStrings["reportInstance"] == null) throw new Exception();
} catch {
WriteErrorObject(context,"Cannot find the database connection string.");
return;
}
// Get our connection string
string connectionstring = ConfigurationManager.ConnectionStrings["reportInstance"].ConnectionString;
// Create our sproc caller
StoredProc proc;
try {
proc = new StoredProc("usp_rep2_agency_list",connectionstring,30);
} catch (Exception ex) {
WriteErrorObject(context,"There was an exception creating the stored procedure caller: " + ex.Message);
return;
}
// Set up sproc
if (revision != -1) proc.AddParameter("@revision",revision,SqlDbType.Int);
proc.AddParameter("@user_id",user_id,SqlDbType.Int);
if (query != null && query.Length > 0) proc.AddParameter("@query",query,SqlDbType.NVarChar);
// Execute sproc
DataSet results;
try {
results = (DataSet)proc.Execute(StoredProc.ExecuteTypes.ReturnDataset);
} catch (Exception ex) {
WriteErrorObject(context,"There was an exception calling the stored procedure: " + ex.Message);
return;
}
// Check we have results
if (results == null) {
WriteErrorObject(context,"There was no dataset returned from the stored procedure.");
return;
}
// Check we have a table
if (results.Tables.Count < 1) {
WriteErrorObject(context,"There was no tables found in the returned dataset from the stored procedure.");
return;
}
// Get the table
DataTable table = results.Tables[0];
// Begin JSON
StringWriter writer = new StringWriter();
JsonWriter json = new JsonWriter(writer);
json.WriteStartObject();
json.WritePropertyName("success");
json.WriteValue(true);
json.WritePropertyName("count");
json.WriteValue(table.Rows.Count);
json.WritePropertyName("list");
json.WriteStartArray();
// Process table rows
for (int i = 0; i < table.Rows.Count; i++) {
// Get row
DataRow row = table.Rows[i];
// ID
if (row["agency_id"] == null || row["agency_id"] == DBNull.Value) {
WriteErrorObject(context,"There was an error processing the agency id value from row " + i.ToString() + ".");
return;
}
int agency_id;
if (!int.TryParse(row["agency_id"].ToString(),out agency_id)) {
WriteErrorObject(context,"Could not parse the agency id value from row " + i.ToString() + ".");
return;
}
// Name
if (row["agency_name"] == null || row["agency_name"] == DBNull.Value) {
WriteErrorObject(context,"There was an error processing the agency name value from row " + i.ToString() + ".");
return;
}
string agency_name = row["agency_name"].ToString();
// Write out JSON for this row
json.WriteStartObject();
json.WritePropertyName("agency_id");
json.WriteValue(agency_id);
json.WritePropertyName("agency_name");
json.WriteValue(agency_name);
json.WritePropertyName("icon");
json.WriteValue("iq-reporting-dropdowns-agency");
json.WriteEndObject();
}
// End JSON
json.WriteEndArray();
json.WriteEndObject();
string text = writer.GetStringBuilder().ToString();
context.Response.Write(text);
context.Response.Flush();
}
Ext-nous alors:
this.ddlAgency = new Ext.form.ComboBox({
fieldLabel: "Agency",
mode: "remote",
triggerAction: "all",
forceSelection: true,
displayField: "agency_name",
valueField: "agency_id",
iconField: "icon",
typeAhead: true,
minChars: 1,
allowBlank: false,
anchor: "100%",
emptyText: "Select an Agency...",
store: new Ext.data.Store({
autoLoad: false,
proxy: new Ext.data.HttpProxy({
method: "GET",
url: "whatever.ashx"
}),
reader: new Ext.data.JsonReader(
{root: "list", totalProperty: "count"},
[{name: "agency_id", type: "int"},{name: "agency_name", type: "string"},{name: "icon", type: "string"}]
),
baseParams: {
action: "agencylist",
level: 1
}
})
});
Note, nous utilisons la bibliothèque 'Json.NET' pour gérer JSON et une classe personnalisée, 'StoredProc' faire l'interaction de base de données. Vous n'aurez pas non plus la méthode WriteErrorObject() qui sérialise simplement une erreur, mais vous avez l'idée.
Salut Lloyd, j'ai essayé selon mes champs de table mais, j'obtiens une erreur --- IQ3 est indéfini, ainsi j'ai enlevé cette propriété maintenant son ne fonctionne pas mais aucune erreur ne vient. je reçois Newtonsoft.Json.Net20.dll aussi ... depuis que je n'ai pas de connaissances de base dans extjs, je ne peux pas identifier le probelm. Ainsi pouvez-vous pls envoyer le projet d'échantillon qui frappe n'importe quel db de SQL commun et obtiennent des données .... à mon identification de courrier "[email protected]" cela m'aide vraiment plein pour moi ... – vineth
dans la ligne --JsonWriter json = new JsonWriter (écrivain); J'ai cette erreur // Impossible de créer une instance de la classe abstraite ou de l'interface 'Newtonsoft.Json.JsonWriter' – vineth
La version que j'utilise est l'ancienne version pour .NET 2.0, je crois que les nouvelles versions sont JsonTextWriter. – Lloyd