2010-09-18 29 views
5

Tengo un formulario con un textarea (tinymce) para el contenido de entrada. Al realizar una petición AJAX, tengo el error:¿Cómo enviar contenido html a través de una solicitud ajax?

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

Luego he intentado algo así como

html.encodeURIComponent() o escape() pero el error sigue aquí

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 (Yo uso jQuery)

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

Tan pronto como presiono el botón de enviar, aparece el error. No se realiza ninguna solicitud de Ajax. He intentado agregar ValidateRequest="false" a la página aspx pero el problema todavía está aquí.

¡Se agradece cualquier ayuda!

Respuesta

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

Ahora el error proviene del script del lado del servidor que no acepta HTML. El motor de ASP.NET eliminará automáticamente cualquier solicitud que contenga HTML. Existen diferentes formas de deshabilitar este comportamiento bajo su propio riesgo. Uno de ellos consiste en agregar el ValidateRequest="false" al encabezado aspx @Page.

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

Si se trata de una aplicación ASP.NET MVC se puede decorar la acción del controlador a los que envías con el atributo [ValidateInput(false)]:

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

También es importante tener en cuenta que si está ejecutando .NET 4.0 se le need to add lo siguiente a su web.config:

<httpRuntime requestValidationMode="2.0" /> 
+0

supongo que también, así que he intentado codificar el contenido html, pero todavía encontrar nada ~ ~ – ByulTaeng

+0

No es necesario para codificar nada. Si usa hash 'data' para enviar parámetros jQuery se encargará de la codificación. –

+0

¿Podría darme un ejemplo o un enlace al tutor? ¡Muchas gracias! – ByulTaeng

1

En mi opinión, otra alternativa válida, pero es lento base 64 que codifica el código HTML st anillo. que utiliza la extensión de la base 64 de jQuery:.

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

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

esto es muy bueno :) la serialización de otra manera estaba recibiendo saludos Gracias chicos –

+0

simplemente use 'btoa()' para codificar, y 'atob()' para decodificar. https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/atob – harryparkdotio

Cuestiones relacionadas