Sto cercando di creare una "micro-webapp" molto, molto semplice, che sospetto possa interessare ad alcuni Stack Overflow se mai lo avessi fatto. Lo sto ospitando sul mio C # nel sito Depth, che è ASP.NET 3.5 vaniglia (ovvero non MVC).
Il flusso è molto semplice:
- Se un utente accede all'app con un URL che non specifica tutti i parametri (o se uno di essi non è valido), voglio solo visualizzare i controlli di input dell'utente. (Ce ne sono solo due.)
- Se un utente immette l'applicazione con un URL che fa avere tutti i parametri richiesti, voglio visualizzare i risultati e i controlli di input (in modo da poter modificare i parametri)
Ecco i miei requisiti autoimposti (miscela di progettazione e realizzazione):
- Voglio che l'invio utilizzi GET anziché POST, principalmente per consentire agli utenti di aggiungere facilmente la pagina ai segnalibri.
- Io non voglio che l'URL per finiscono per guardare sciocco dopo la presentazione, con pezzi estranei e pezzi su di esso. Solo l'URL principale e i parametri reali per favore.
- Idealmente, vorrei evitare di richiedere JavaScript. Non c'è motivo per farlo in questa app.
- Voglio essere in grado di accedere ai controlli durante il tempo di rendering e impostare valori ecc. In particolare, voglio essere in grado di impostare i valori predefiniti dei controlli sui valori dei parametri passati, se ASP.NET non può farlo automaticamente per me (nell'ambito delle altre restrizioni).
- Sono felice di fare da solo tutta la convalida dei parametri e non ho bisogno di molto in termini di eventi lato server. È davvero semplice impostare tutto sul caricamento della pagina invece di associare eventi a pulsanti ecc.
La maggior parte di questi va bene, ma non ho trovato alcun modo per rimuovere completamente il viewstate e mantenere il resto della funzionalità utile. Usando il post di questo post sul blog sono riuscito a evitare di ottenere qualsiasi valore effettivo per il viewstate, ma finisce comunque come parametro sull'URL, che sembra davvero brutto.
Se lo trasformo in un semplice modulo HTML anziché in un modulo ASP.NET (ovvero estraggo runat="server"
), allora non ottengo alcun viewstate magico, ma non posso accedere ai controlli a livello di codice.
Ho potuto fare tutto questo ignorando la maggior parte di ASP.NET e costruire un documento XML con LINQ to XML, e l'attuazione IHttpHandler
. Sembra un po 'basso livello però.
Mi rendo conto che i miei problemi potrebbero essere risolti rilassando i miei vincoli (ad esempio utilizzando POST e non preoccupandosi del parametro surplus) o utilizzando ASP.NET MVC, ma i miei requisiti sono davvero irragionevoli?
Forse ASP.NET non si riduce a questo tipo di app? C'è comunque un'alternativa molto probabile: sono solo uno stupido e c'è un modo perfettamente semplice di farlo che non ho ancora trovato.
Qualche pensiero, qualcuno? (Indica i commenti su come sono caduti i potenti, ecc. Va bene - spero di non aver mai affermato di essere un esperto ASP.NET, poiché la verità è piuttosto l'opposto ...)