2009-07-10 8 views
9

J'essaie de désactiver une demande de validation pour toutes les méthodes d'action dans un contrôleur en faisant ceci:Je ne peux pas désactiver une demande de validation pour un contrôleur ASP.NET MVC

[ValidateInput(false)] 
public class MyController : Controller 
{ 
    ... 

La référence J'utilise dit C'est possible et ça me dit de faire comme ça, mais pour une raison quelconque ça ne marche pas.

Si je soumets tout html (même une simple balise <b>) à travers une zone de texte, je reçois l'erreur:

A potentially dangerous Request.Form value was detected from the client (text=<b>").

Il est également ne fonctionne pas en attachant l'attribut à une méthode individuelle. Comment puis-je désactiver la demande de validation pour un contrôleur?

EDIT

Je travaille dans VS2008 construit dans le serveur de test.

+0

sur la base de toutes les choses qui ne fonctionne pas, vous devrez fournir beaucoup plus de détails. Courez-vous dans IIS, ou Cassini? Vous utilisez MVC v1.0, n'est-ce pas? Quelle est la signature de méthode de l'action qui échoue? – GalacticCowboy

+4

J'aime quand je trouve quelqu'un qui pose la question exacte que j'ai - seulement pour voir qu'elle est fermée pour ne pas être applicable aux autres visiteurs. FML. –

Répondre

14

Je l'ai testé sur ma machine, sur la définition de classe et la méthode d'action, et cela a fonctionné pour moi dans les deux cas. Êtes-vous sûr que votre vue s'aligne avec votre méthode/contrôleur? Mettez-vous l'attribut sur la méthode GET ou la méthode POST?

[AcceptVerbs(HttpVerbs.Post)] 
[ValidateInput(false)] 
public ActionResult MyAction (int id, string content) { 
    // ... 
} 
+0

Dans la question initiale, j'ai déclaré que je l'ai fait. Et ma référence, Apress Pro ASP.NET MVC Framework, indique clairement, "Si vous voulez le désactiver soit pour une méthode d'action spécifique ou à travers un contrôleur spécifique, vous pouvez utiliser le filtre [ValidateInput], comme suit: [ ValidateInput (false)] public class MyController: Controller {...} " –

+0

Voir http://stackoverflow.com/questions/807662/why-is-validateinputfalse-not-working –

+2

Désolé, Ronnie. Cela fonctionne sur ma machine, que je mette l'attribut sur la méthode ou sur la classe. –

2

Pro Framework ASP.NET MVC (p466) dit le texte suivant est censé travailler:

public class MyController : Controller 
{ 
    public MyController() { 
     ValidateRequest = false; 
    } 
} 
+0

Il n'intellense pas ou ne compile pas là. J'ai essayé de le mettre dans la méthode d'action (où il fait intellisense), mais cela n'a pas fonctionné. –

+0

"ValidateRequest = false;" est censé être dans le constructeur. Je l'avais essayé sur un de mes contrôleurs mais je l'ai transcrit incorrectement. – keithm

+0

Cela fonctionne si vous le mettez dans le constructeur. –

0

Pouvez-vous poster votre fichier contrôleur et votre fichier de vue.

Cela fonctionne;

MytestController --------------------------------

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.Mvc; 
using System.Web.Mvc.Ajax; 

namespace testapp.Controllers 
{ 
    [ValidateInput(false)] 
    public class MyTestController : Controller 
    { 

     public ActionResult Index() 
     { 
      return View(); 
     } 

    } 
} 

MyTest (Index) - -------------------------------------------------- ---

<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage" %> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

<html xmlns="http://www.w3.org/1999/xhtml" > 
<head runat="server"> 
    <title>Index</title> 
</head> 
<body> 
<% using (Html.BeginForm()) { %> 
<%= Html.TextBox("test")%> 
<button type="submit" >Submit</button> 
<%} %> 
</body> 
</html> 
+0

votre échantillon pour asp.net mvc 2 ne fonctionne pas – IEnumerator

12

pour le faire, vous devez travailler à modifier web.config ainsi:

<system.web> 
    <httpRuntime requestValidationMode="2.0"/> 
    ... 
</system.web> 
+0

J'ai eu un projet ASP.NET MVC 1.0 déployé en production depuis plus d'un an, ce soir, le client m'envoie un e-mail me disant que l'une des formes qui utilise un éditeur WYSIWYG soumettre. J'ai eu [ValidateInput (false)] sur l'action aussi longtemps que le site a été déployé et il a bien fonctionné jusqu'à récemment. Le fournisseur d'hébergement doit avoir changé quelque chose de leur côté. J'ai ajouté la balise httpRuntime à system.web comme Jan l'a suggéré et cela a résolu mon problème. –

Questions connexes