Hier wird der Fehler angezeigt:
ValueProviderResult value = bindingContext.ValueProvider.GetValue("ConfirmationMessage");
Wie erlaube ich nur eine Auswahl von Werten? dh
[ValidateInput(false)]
public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
ValueProviderResult value = bindingContext.ValueProvider.GetValue("ConfirmationMessage");
ValueProviderResult value2 = bindingContext.ValueProvider.GetValue("ConfirmationMessage2");
}
Antworten:
Sie haben einige Möglichkeiten.
Fügen Sie im Modell dieses Attribut zu jeder Eigenschaft hinzu, die Sie benötigen, um HTML zuzulassen - beste Wahl
Fügen Sie in der Controller-Aktion dieses Attribut hinzu, um den gesamten HTML-Code zuzulassen
Brute Force in web.config - definitiv nicht empfohlen
Fügen Sie in der Datei web.config innerhalb der Tags das Element httpRuntime mit dem Attribut requestValidationMode = "2.0" ein. Fügen Sie außerdem das Attribut validateRequest = "false" in das Element pages ein.
Weitere Informationen: http://davidhayden.com/blog/dave/archive/2011/01/16/AllowHtmlAttributeASPNETMVC3.aspx
Das Obige funktioniert für die Verwendung des Standard-Modellbinders.
Benutzerdefinierter ModelBinder
Es scheint, dass ein Aufruf von bindingContext.ValueProvider.GetValue () im obigen Code die Daten unabhängig von den Attributen immer überprüft. Das Durchsuchen der ASP.NET MVC-Quellen zeigt, dass der DefaultModelBinder zuerst prüft, ob eine Anforderungsvalidierung erforderlich ist, und dann die Methode bindingContext.UnvalidatedValueProvider.GetValue () mit einem Parameter aufruft, der angibt, ob eine Validierung erforderlich ist oder nicht.
Leider können wir keinen Framework-Code verwenden, da er versiegelt, privat oder was auch immer ist, um ignorante Entwickler vor gefährlichen Dingen zu schützen. Es ist jedoch nicht allzu schwierig, einen funktionierenden benutzerdefinierten Modellordner zu erstellen, der die Attribute AllowHtml und ValidateInput berücksichtigt:
Das andere erforderliche Stück ist eine Möglichkeit, einen nicht validierten Wert abzurufen. In diesem Beispiel verwenden wir eine Erweiterungsmethode für die ModelBindingContext-Klasse:
Weitere Informationen hierzu finden Sie unter http://blogs.taiga.nl/martijn/2011/09/29/custom-model-binders-and-request-validation/
quelle
Versuchen:
quelle
var re = request.Unvalidated.Form["ConfirmationMessage"];
Um die Antwort von @DW in meinem Edit-Controller zu erweitern und über Formularwerte zu iterieren, musste ich alle Instanzen von
Request.Params.AllKeys
withRequest.Unvalidated.Form.AllKeys
und alle Instanzen vonRequest[key]
with ersetzenRequest.Unvalidated.Form[key]
.Dies war die einzige Lösung, die für mich funktioniert hat.
quelle
Wie Mike Godin schrieb, müssen Sie, selbst wenn Sie das Attribut [ValidateInput (false)] festlegen, Request.Unvalidated.Form anstelle von Request.Form verwenden. Dies funktionierte bei mir mit ASP.NET MVC 5
quelle
Hier sind die Schritte zum Codieren auf Clientebene und zum Decodieren auf Serverebene:
Veröffentlichen Sie das Formular mit der jquery submit-Methode.
Klicken Sie in der jquery-Schaltfläche auf das Codierungsfeld für die Ereignismethode, das Sie auf dem Server veröffentlichen möchten. Beispiel:
Greifen Sie in Controller Level auf alle Formular-ID-Werte mit zu
Beispielbeispiel:
Controller-Ebene:
Kundenebene:
In der Dokumentbereitschaftsfunktion:
quelle