Ich versuche Request.Form.Set (k, v), aber es ist Wurf Ausnahme Sammlung ist schreibgeschütztC# Kann ich die Variablen von Request.Form ändern?
Antwort
Dies ist genau die gleiche wie Request.Querystring modifizieren. Beide sind intern durch private Eigenschaften kompliziert und was könnte ein Fehler sein, aber es gibt zwei mögliche Lösungen, die mir bekannt sind (Ich werde den response.redirect Plan aus der Hand entlassen - das ist schrecklich).
Methode ist Reflektion zu verwenden, um die Sammlung direkt zu ändern:
NameValueCollection oQuery = Request.QueryString;
oQuery = (NameValueCollection)Request.GetType().GetField("_queryString",BindingFlags.NonPublic | BindingFlags.Instance).GetValue(Request);
PropertyInfo oReadable = oQuery .GetType().GetProperty("IsReadOnly", BindingFlags.NonPublic | BindingFlags.Instance);
oReadable.SetValue(oQuery, false, null);
oQuery["foo"] = "bar";
oReadable.SetValue(oQuery, true, null);
Plan B, die ich denke, eignet sich besser, um Unit-Test ist mit der Sammlung zu vermeiden, direkt zu tun und stattdessen es als Namevaluecollection passieren zu jeder Methode, die Sie damit umgehen wollen, oberflächliches Kopieren, was auch immer Sie brauchen. Ich habe das selbst benutzt, um Web-Anfragen zu verspotten.
Edit: Marc GRA gab beredte Gründe für Plan B
Das Formular ist eine Darstellung von dem, was der Client in der Anfrage gesendet. Was willst du machen? Persönlich würde ich versuchen, den Code "read the form" von dem Code "tue etwas mit den Werten" zu trennen - auf diese Weise können Sie jede Vorverarbeitung (beim Lesen aus dem Formular) und keine der späteren durchführen Code muss wissen, was tatsächlich gesendet wurde - es nimmt nur die Werte, die ihm gegeben werden (dh es spricht nie direkt mit der Anfrage).
Wenn dies auch bedeutet, dass Sie Ihre Logik testen können, ohne ein Formular oder gar eine http-Anfrage zu benötigen.
Eigentlich ASP.NET MVC für Sie tun ... eine Menge von dieser (der obigen Absatz)
Beachten Sie, dass die .Items Sammlung aktualisieren können - aber das ist ein bisschen mehr vage (dh es bezieht sich nicht speziell auf die Form).
(prost zur Fixierung des Tippfehler BTW)
- 1. Wie kann ich die Eigenschaften ändern. C#
- 2. Wie kann ich die Form einer Variablen in TensorFlow ändern?
- 3. Kann Gulp LESS-Variablen ändern?
- 4. Kann ich die Komprimierungsstufe von ZipArchive ändern?
- 5. Kann ich Variablen für die Destrukturierung von Objekten vordefinieren?
- 6. Wie kann ich die Zeit ändern? In der C# -Webanwendung
- 7. Ändern einer Javascript-Variablen in objective-C
- 8. C#: Kann ich die Assembly Version folgendermaßen ändern: 1.6?
- 9. Request.Form löst Ausnahme
- 10. Wie kann ich die Werte von Variablen im JavaScript-Code einer Website ändern?
- 11. Wie kann ich die Antwortformatierung selbst ändern?
- 12. Request.Form und Radiobutton ids
- 13. Wie kann ich die Standard-Port-Nummer von Activemq ändern
- 14. Wie kann ich image.source mit C# ändern?
- 15. ASP.NET: Request.Form ist langsam!
- 16. Request.Form für Dropdown
- 17. ASP.NET MVC: Wie kann ich die Rolle eines Benutzers ändern?
- 18. Wie kann ich die Feldgruppenreihenfolge ändern?
- 19. Ich kann die Seite nicht ändern
- 20. Wie kann ich die Request.RawUrl-Eigenschaft ändern?
- 21. C# Die Verwendung von nicht zugewiesenen lokalen Variablen c
- 22. Handle "potenziell gefährlich Request.Form Wert ..."
- 23. die Reservespeicher von C++ Vektor Ändern
- 24. Kann ich die Position der Navigationsleiste ändern?
- 25. Wie kann ich die Startseite ändern?
- 26. Kann ich die Akzentfarbe (AppCompat) programmgesteuert ändern?
- 27. Ich kann die static_url in settings.py ändern?
- 28. Ich kann die Sitzungsparameter nicht ändern
- 29. Wie kann ich die Bildgröße ändern?
- 30. Kann ich die Android startActivity() - Übergangsanimation ändern?
private Sachen auf diese Weise Manipulieren ist keineswegs eine vorgeschlagene Sache und soll so viel wie möglich (~ = unter allen Umständen) vermieden werden. Schließlich werden sie aus einem bestimmten Grund privat gemacht. Sie werden sich auf eine bestimmte Version einer Bibliothek verlassen. Jede Änderung in der zugrunde liegenden Implementierung kann Ihre App beschädigen. –
Und Sie werden sehen, ich befürworte Plan B – annakata
Plan A verpasste etwas Detail. Ich denke es ist nicht richtig. Sie können selbst testen. –