2009-09-29 13 views
14

Sto generando dinamicamente un modulo HTML che viene inviato a una pagina Web .aspx. Come faccio a determinare nella pagina risultante quali nomi di variabili sono stati inviati e quali sono stati i valori? Utilizzo: Richiesta ["VarName"]. ToChar(); Funziona, ma presume che conosca tutti i nomi delle variabili. Come posso ottenere i nomi e i valori?C# - Come elencare i nomi e i valori delle variabili pubblicati nella pagina ASPX

Idealmente, la soluzione potrebbe funzionare sia per il POST e GET osservazioni ...

Grazie!

risposta

29

Hai provato qualcosa di simile:

Per richiesta Inserisci:

foreach(string key in Request.Form.Keys) 
{ 
    Response.Write (Request.Form[key]); 
} 

Per una richiesta GET:

foreach(string key in Request.QueryString.Keys) 
{ 
    Response.Write (Request.QueryString[key]); 
} 
+0

che ha funzionato dopo ho cambiato Request.Form.keys a Request.Form.Keys, e simili per Request.QueryString.Keys. Grazie! – NYARROW

+0

Siamo spiacenti. Sono giunto a fare affidamento su quell'intelligenza per risolvere i miei problemi di caso a molto. =) Risolto nella risposta. – JohnFx

6

Ognuno di Request.Cookies, Request.Form, Request.QueryString e Richiesta. ServerVariables è un NameValueCollection o simile. Puoi chiedere a ciascuno di quelli per le sue chiavi e procedere da lì.

foreach (string key in Request.QueryString.Keys) 
{ 
    string value = Request.QueryString[key]; 
    // etc 
} 

Piuttosto che collezioni è necessario dipenderà lo scopo di questo - se è solo per la diagnostica, sarei tentato di scaricare tutti fuori.

+1

Intendevi "Request.QueryString [chiave]", forse? – JohnFx

+0

Grazie, risolto :) –

1

Non leggere dalla raccolta Request, ovvero una raccolta composita che contiene i valori di modulo e querystring, ma anche cookie e variabili del server. Leggi dalle raccolte specifiche in cui desideri ottenere i dati, ad esempio Request.Form (per POST) e Request.QueryString (per GET).

In questo modo è possibile ottenere tutte le chiavi e valori in una stringa: metodo di

StringBuilder builder = new StringBuilder(); 
builder.AppendLine("Form values:"); 
foreach (string key in Request.Form.Keys) { 
    builder.Append(" ").Append(key).Append(" = ").AppendLine(Request.Form[key]); 
} 
builder.AppendLine("QueryString values:"); 
foreach (string keu in Request.QueryString.Keys) { 
    builder.Append(" ").Append(key).Append(" = ").AppendLine(Request.QueryString[key]); 
} 
string values = builder.ToString(); 
4

di JohnFx funziona bene. È inoltre possibile includere query string, variabile del server, ed i dati dei cookie nel mix utilizzando la raccolta Request.Params, come in:

foreach(string key in Request.Params.Keys) 
{ 
    Response.Write(String.Format("{0}: {1}<br />", key, Request.Params[key])); 
} 

È necessario prestare attenzione quando si utilizza la raccolta Request.Params. Se una variabile QUERYSTRING e una variabile FORM condividono entrambi la chiave "Nome" e hanno valori "Val1" e "Val2", il valore di Request.Params["Name"] sarà "Val1, Val2".

0

È necessario utilizzare Request.Form come raccolta. Si noti che i parametri multivalore (una selezione multipla) vengono trasformati in una raccolta autonomamente. C'è un esempio su this page.

0

Nella dichiarazione del aspx aggiungere Trace = 'true'

<%@ Page Language="VB" Trace="True" AutoEventWireup="false" CodeFile="Default.aspx.vb" Inherits="_Default" %> 
0

Oltre alle risposte di cui sopra, se si desidera combinare la raccolta di QueryString, Form, ServerVariables, e gli elementi Cookies, allora la Il modo migliore è utilizzare HttpRequest.Params

0

Nella dichiarazione del.ASPX aggiungere Trace = 'true'

<%@ Page Language="CS" Trace="True" AutoEventWireup="false" CodeFile="Default.aspx.cs" Inherits="_Default" %> 

Sarete in grado di vedere i dati dei moduli, di sessione, i dati applicativi ecc

Problemi correlati