2010-09-18 40 views
5

我有一個用於輸入內容的textarea(tinymce)表單。當我執行一個Ajax請求,我得到了錯誤:如何通過ajax請求發送html內容?

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

然後我試着像

html.encodeURIComponent()escape()但錯誤仍在這裏

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> 

腳本(我用jQuery)

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

只要按下提交按鈕,就會出現錯誤。沒有ajax請求。我已經嘗試將ValidateRequest="false"添加到aspx頁面,但問題仍然存在。

任何幫助表示讚賞!

回答

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

現在的誤差來自於服務器端的腳本不接受HTML。 ASP.NET引擎將自動刪除任何包含HTML的請求。您有風險自行承擔禁用此行爲的不同方法。其中之一包括將ValidateRequest="false"添加到aspx @Page標題。

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

同樣重要的是要注意,如果你正在運行:

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

如果它是你可以裝飾控制器動作的ASP.NET MVC應用程序,你與[ValidateInput(false)]屬性發布.NET 4.0,你會need to add以下到你的web.config:

<httpRuntime requestValidationMode="2.0" /> 
+0

我想這太讓我一直在努力,在HTML內容進行編碼,但仍然一無所獲~~ – ByulTaeng 2010-09-18 08:41:01

+0

你不需要任何編碼。如果您使用'data'散列來發送參數,jQuery將負責編碼。 – 2010-09-18 08:42:59

+0

你能否給我一個例子或鏈接到tut?非常感謝! – ByulTaeng 2010-09-18 08:51:38

1

在我看來,另一個有效,但慢的選擇是基於64位編碼的HTML ST環。 我用的jQuery中的Base64擴展名:

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

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

這是非常酷的:)序列化否則得到小腿上漲感謝球員 – 2012-11-24 10:32:45

+0

只使用'btoa()'編碼,'atob()'解碼。 https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/atob – harryparkdotio 2017-02-12 03:46:20