2010-09-18 6 views
5

J'ai un formulaire avec un textarea (tinymce) pour le contenu d'entrée. Lorsque j'effectue une demande ajax, je suis l'erreur:Comment envoyer du contenu html via une requête ajax?

A potentially dangerous Request.Form value was detected from the client

J'ai essayé quelque chose comme

html.encodeURIComponent() ou escape() mais l'erreur est toujours là

HTML:

<form id="editForm" action="" method="post"> 
    <input type="text" id="title" name="title" /> 
    <textarea id="content" name="content"></textarea> 
    <input type="button" id="submit" onclick="Submit();" /> 
</form> 

Script (j'utilise jQuery)

function Submit(){ 
$.ajax({     
    url: 'ajax.aspx?type=addcontent&' + $('#editForm').serialize() + '&rnd=' + Math.random(), 
    success: function(data) { 
    alert('OK'); 
    } 
}); 
} 

Dès que j'appuie sur le bouton Envoyer, l'erreur apparaît. Aucune requête ajax n'est faite. J'ai essayé d'ajouter ValidateRequest="false" à la page ASPX mais le problème est toujours là.

Toute aide est appréciée!

Répondre

7
$.post('/foo', { htmlContent: '<someHtml/>' }, function(result) { 
    alert('ok'); 
}); 

Maintenant, l'erreur provient du script côté serveur qui n'accepte pas le code HTML. Le moteur ASP.NET supprimera automatiquement toutes les demandes contenant du code HTML. Il existe différents moyens de désactiver ce comportement à vos risques et périls. L'un d'entre eux consiste à ajouter le ValidateRequest="false" à l'en-tête aspx @Page.

<%@ Page Language="C#" AutoEventWireup="false" ValidateRequest="false" %> 

S'il est une application ASP.NET MVC, vous pouvez décorer l'action du contrôleur auquel vous envoyez des messages avec l'attribut [ValidateInput(false)]:

[HttpPost] 
[ValidateInput(false)] 
public ActionResult Foo() 
{ 
    ...  
} 

Il est également important de noter que si vous exécutez .NET 4.0 vous need to add ce qui suit à votre web.config:

<httpRuntime requestValidationMode="2.0" /> 
+0

Je suppose que trop donc j'ai essayé de coder le contenu html mais vous pouvez trouver encore rien ~ ~ – ByulTaeng

+0

Vous ne avez pas besoin de quoi que ce soit encoder. Si vous utilisez le hachage 'data' pour envoyer les paramètres, jQuery se chargera de l'encodage. –

+0

Pourriez-vous s'il vous plaît me donner un exemple ou un lien vers le tut? Merci beaucoup! – ByulTaeng

1

à mon avis, une autre alternative valable mais lente est base64 codant pour votre HTML st bague. Je utilisé l'extension base64 de jQuery.

var html = ...my html unsafe text... 

var encodedHtml = $.base64.encode(html); 
+0

c'est assez cool :) la sérialisation était autrement obtenir des hick-ups Merci les gars –

+0

juste utiliser 'btoa()' pour encoder, et 'atob()' pour décoder. https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/atob – harryparkdotio

Questions connexes