Πώς να πάρει την αξία που χτίστηκε, κωδικοποιημένα ViewState;




Πρέπει να αρπάξει την κωδικοποίηση base64 αναπαράσταση του ViewState. Προφανώς αυτό δεν θα είναι διαθέσιμο μέχρι αρκετά αργά στον κύκλο ζωής αίτημα, το οποίο είναι εντάξει.


Για παράδειγμα, εάν η έξοδος της σελίδας περιλαμβάνει:



```
<input type=hidden name=__VIEWSTATE 
  id=__VIEWSTATE value=/wEPDwUJODU0Njc5MD...== />

```

Χρειάζομαι έναν τρόπο από την πλευρά του διακομιστή για να πάρει την τιμή `/wEPDwUJODU0Njc5MD...==`


Για να διευκρινιστεί, χρειάζομαι αυτή την τιμή όταν η σελίδα έχει καταστεί, όχι για PostBack. π.χ. θα πρέπει να γνωρίζουν την αξία ViewState που έχει *σταλεί* στον πελάτη, όχι το ViewState Παίρνω πίσω από αυτούς.
Rex, υποψιάζομαι ένα καλό μέρος για να αρχίσετε να ψάχνετε είναι λύσεις που **συμπιέζουν το ViewState** - από όπου και αν αρπάζοντας ViewState στο διακομιστή προτού να σταλεί προς τα κάτω στον πελάτη και χρησιμοποιούντο το gzip αυτό. Αυτό είναι ακριβώς που θέλετε να είναι.


* [Scott Hanselman για ViewState συμπίεσης](http://www.hanselman.com/blog/CommentView,guid,febce059-7e7c-439e-af3d-c53d250b3e9c.aspx) (2005)
* [ViewState συμπίεσης με System.IO.Compression](http://www.bloggingdeveloper.com/post/How-To-Compress-ViewState-in-ASPNET-20-ViewState-Compression-with-SystemIOCompression.aspx) (2007)
<p>μπορείτε να λάβετε ροή εξόδου για τη σύνδεση και να γράψετε τη συμβολοσειρά ερώτησης παραμέτρων σε αυτήν.</p><pre><code>url url = new url("http://yoururl.com"); httpsurlconnection conn = (httpsurlconnection) url.openconnection(); conn.setreadtimeout(10000); conn.setconnecttimeout(15000); conn.setrequestmethod("post"); conn.setdoinput(true); conn.setdooutput(true); list&lt;namevaluepair&gt; params = new arraylist&lt;namevaluepair&gt;(); params.add(new basicnamevaluepair("firstparam", paramvalue1)); params.add(new basicnamevaluepair("secondparam", paramvalue2)); params.add(new basicnamevaluepair("thirdparam", paramvalue3)); outputstream os = conn.getoutputstream(); bufferedwriter writer = new bufferedwriter( new outputstreamwriter(os, "utf-8")); writer.write(getquery(params)); writer.flush(); writer.close(); os.close(); conn.connect(); </code></pre><p>...</p><pre><code>private string getquery(list&lt;namevaluepair&gt; params) throws unsupportedencodingexception { stringbuilder result = new stringbuilder(); boolean first = true; for (namevaluepair pair : params) { if (first) first = false; else result.append("&amp;"); result.append(urlencoder.encode(pair.getname(), "utf-8")); result.append("="); result.append(urlencoder.encode(pair.getvalue(), "utf-8")); } return result.tostring(); } </code></pre> Οι άνθρωποι διακομιστής πήρε πίσω σε μένα. Θα αλλάξει το «ιστοσελίδα στο 4,0 Ολοκληρωμένη αγωγού λειτουργία.» και όλα τα έργα τώρα. Πηγαίνετε σχήμα.


Είμαι βέβαιος ότι είχα ελέγξει ότι ήταν σε κατάσταση Ολοκληρωμένη Pipeline, αλλά hey ho. τι εννοείς δεν μπορείς να το κατεβάσεις?
υπάρχει ένα εικονίδιο πάνω δεξιά που λέει λήψη! <p>το .net 4.0 επιτρέπει στα πρωτεύοντα σύνολα interop (ή μάλλον, τα bits που χρειάζεστε) να ενσωματωθούν στη συνέλευση σας, ώστε να μην χρειάζεται να τα αναπτύξετε παράλληλα με την εφαρμογή σας.</p><p>για οποιονδήποτε λόγο, αυτή η συνέλευση δεν μπορεί να ενσωματωθεί - αλλά αυτό ακούγεται σαν να μην είναι πρόβλημα για εσάς. ανοίξτε την καρτέλα ιδιότητες για τη συνέλευση στο visual studio 2010 και ορίστε "ενσωμάτωση τύπων interop" σε "false".</p><p>edit: δείτε επίσης την <a href="https://stackoverflow.com/a/4553402/641833">απάντηση</a> του michael gustus, καταργώντας το επίθημα <code>class</code> από τους τύπους που χρησιμοποιείτε.</p> μια πολύ απλή τακτική παρόμοια με την δική σας, είναι να πάρετε τα εμβαδόν του κάθε διαμερίσματος και αφού τα κάνετε μία πρόσθεση όλα μαζί το με αποτέλεσμα της πρόσθεσης πχ 800 τμ να διαιρέσετε τον αριθμό 1000 και με τον αριθμό που θα βρείτε πχ το 1,25 να πολλαπλασιάσετε το εμβαδόν του κάθε διαμερίσματος για το μετατρέψετε σε χιλιοστά. μετά με βάση τα χιλιοστά του 1ου διαμερίσματος πχ 200 και έξοδα 500 ευρώ διαιρείτε τα 500 ευρώ με τον αριθμό 1000 και πολλαπλασιάζετε με τα 200 χιλιοστά 500ευρώ/1000=0,5 χ 200χιλ = 100 ευρώ και το ίδιο και για τα άλλα. τώρα τα κλειστά διαμερίσματα αφού με τον τρόπο αυτό βρείτε πόσο οφείλουν θα τα χρεώσετε μόνο το 30% το υπόλοιπο 70 πχ 150 ευρώ θα το ξαναμοιράσετε σε όλα ξανά με το ίδιο τρόπο. αν θέλετε μπορείτε να εγγραφείτε στην δωρεάν on line έκδοση κοινοχρήστων που έχω στην ιστοσελίδα και να τα βγάλετε από εκεί. τρουλλινός γιώργος , υδραυλικός , αθήνα , αττική , 6932860310. Θα χρησιμοποιηθεί για να πάρει αυτό - νομίζω ότι είναι ένα bug με το παράθυρο εντοπισμού σφαλμάτων «Autos»:


[http://social.msdn.microsoft.com/Forums/en-US/vsdebug/thread/eabc58b1-51b2-49ce-b710-15e2bf7e7516/](https://social.msdn.microsoft.com/Forums/en-US/vsdebug/thread/eabc58b1-51b2-49ce-b710-15e2bf7e7516/) Θα πρέπει να δώσετε περισσότερες πληροφορίες σχετικά με το περιβάλλον ανάπτυξής σας για να πάρετε μια συγκεκριμένη απάντηση.


Για παράδειγμα, με ένα C # έργο στο Visual Studio, μπορείτε να κάνετε δεξί κλικ στα Project-> Ιδιότητες και, στη συνέχεια, να συμπληρώσετε το πεδίο «Εντολή επιχειρήματα γραμμή» στην καρτέλα «Debug». Προσθέτοντας την `--decorate`επιλογή θα εμφανιστούν οι αναφορές που δείχνουν προς κάθε commit. Έτσι, για παράδειγμα, θα δείτε **HEAD** και **προέλευσης / HEAD** (ή οτιδήποτε άλλο) στις σωστές θέσεις.


Μπορούν ακόμη και να είναι σε αρκετά χρώματα, αν έχετε αυτό ενεργοποιηθεί.


PS. ευχαριστώ για να με κάνει να ελέγξετε αυτό - είναι πραγματικά πολύ ωραία, ειδικά με τον τρόπο που δείχνει επίσης διάφορες κρύπτες μου. μια πολύ απλή τακτική παρόμοια με την δική σας, είναι να πάρετε τα εμβαδόν του κάθε διαμερίσματος και αφού τα κάνετε μία πρόσθεση όλα μαζί το με αποτέλεσμα της πρόσθεσης πχ 800 τμ να διαιρέσετε τον αριθμό 1000 και με τον αριθμό που θα βρείτε πχ το 1,25 να πολλαπλασιάσετε το εμβαδόν του κάθε διαμερίσματος για το μετατρέψετε σε χιλιοστά. μετά με βάση τα χιλιοστά του 1ου διαμερίσματος πχ 200 και έξοδα 500 ευρώ διαιρείτε τα 500 ευρώ με τον αριθμό 1000 και πολλαπλασιάζετε με τα 200 χιλιοστά 500ευρώ/1000=0,5 χ 200χιλ = 100 ευρώ και το ίδιο και για τα άλλα. τώρα τα κλειστά διαμερίσματα αφού με τον τρόπο αυτό βρείτε πόσο οφείλουν θα τα χρεώσετε μόνο το 30% το υπόλοιπο 70 πχ 150 ευρώ θα το ξαναμοιράσετε σε όλα ξανά με το ίδιο τρόπο. αν θέλετε μπορείτε να εγγραφείτε στην δωρεάν on line έκδοση κοινοχρήστων που έχω στην ιστοσελίδα και να τα βγάλετε από εκεί. τρουλλινός γιώργος 6932860310 υδραυλικές εργασίες σε όλη την αθήνα - αττική μεταμόρφωση, αιγάλεω, κορυδαλλός, κηφισιά, αργυρούπολη, φιλοθέη <p>το <strong>server</strong> (που αποστέλλεται το αίτημα post) πρέπει να περιλαμβάνει την κεφαλίδα <code>access-control-allow-headers</code> (κλπ) <strong>στην απάντησή του</strong>. η τοποθέτησή τους στο αίτημά σας από τον πελάτη δεν έχει καμία επίδραση.</p><p>αυτό οφείλεται στο γεγονός ότι εναπόκειται στον διακομιστή να καθορίσει ότι δέχεται αιτήσεις διασταυρούμενης προέλευσης (και ότι επιτρέπει την κεφαλίδα <code>content-type</code> αίτησης και ούτω καθεξής) - ο πελάτης δεν μπορεί να αποφασίσει για τον εαυτό του ότι ένας δεδομένος διακομιστής πρέπει να επιτρέπει την cors.</p>