Obtenir l'erreur ici:
ValueProviderResult value = bindingContext.ValueProvider.GetValue("ConfirmationMessage");
Comment autoriser une sélection de valeurs uniquement? c'est à dire
[ValidateInput(false)]
public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
ValueProviderResult value = bindingContext.ValueProvider.GetValue("ConfirmationMessage");
ValueProviderResult value2 = bindingContext.ValueProvider.GetValue("ConfirmationMessage2");
}
Réponses:
Vous avez quelques options.
Sur le modèle, ajoutez cet attribut à chaque propriété dont vous avez besoin pour autoriser HTML - meilleur choix
Sur l'action du contrôleur, ajoutez cet attribut pour autoriser tout HTML
Force brute dans web.config - certainement pas recommandé
Dans le fichier web.config, dans les balises, insérez l'élément httpRuntime avec l'attribut requestValidationMode = "2.0". Ajoutez également l'attribut validateRequest = "false" dans l'élément pages.
Plus d'infos: http://davidhayden.com/blog/dave/archive/2011/01/16/AllowHtmlAttributeASPNETMVC3.aspx
Ce qui précède fonctionne pour les utilisations du modelbinder par défaut.
ModelBinder personnalisé
Il semble qu'un appel à bindingContext.ValueProvider.GetValue () dans le code ci-dessus valide toujours les données, quels que soient les attributs. L'exploration des sources ASP.NET MVC révèle que DefaultModelBinder vérifie d'abord si la validation de la demande est requise, puis appelle la méthode bindingContext.UnvalidatedValueProvider.GetValue () avec un paramètre qui indique si la validation est requise ou non.
Malheureusement, nous ne pouvons utiliser aucun code du framework car il est scellé, privé ou autre pour protéger les développeurs ignorants de faire des choses dangereuses, mais il n'est pas trop difficile de créer un classeur de modèle personnalisé fonctionnel qui respecte les attributs AllowHtml et ValidateInput:
L'autre élément requis est un moyen de récupérer une valeur non validée. Dans cet exemple, nous utilisons une méthode d'extension pour la classe ModelBindingContext:
Plus d'informations à ce sujet sur http://blogs.taiga.nl/martijn/2011/09/29/custom-model-binders-and-request-validation/
la source
Essayer:
la source
var re = request.Unvalidated.Form["ConfirmationMessage"];
En développant la réponse de @DW, dans mon contrôleur d'édition, en itérant sur les valeurs de formulaire, j'ai dû remplacer toutes les instances de
Request.Params.AllKeys
avecRequest.Unvalidated.Form.AllKeys
et toutes les instances deRequest[key]
avecRequest.Unvalidated.Form[key]
.C'était la seule solution qui fonctionnait pour moi.
la source
Comme l'a écrit Mike Godin, même si vous définissez l'attribut [ValidateInput (false)], vous devez utiliser Request.Unvalidated.Form au lieu de Request.Form Cela a fonctionné pour moi avec ASP.NET MVC 5
la source
Voici les étapes pour encoder au niveau du client et le décoder au niveau du serveur:
Publiez le formulaire en utilisant la méthode d'envoi jquery.
Dans le bouton jquery, cliquez sur la méthode d'événement pour encoder le champ que vous souhaitez publier sur le serveur. Exemple:
Au niveau du contrôleur, accédez à toutes les valeurs d'identifiant de formulaire en utilisant
Exemple d'exemple:
Niveau du contrôleur:
Niveau client:
Dans la fonction Document Ready:
la source