单击按钮,我希望将ckeditor值传递给处理程序。
$(document).ready(function () {
$('#createtopic').click(function () {
var text = $('#editor1').val();
$.ajax({
type: "post",
url: "Handler/Topic.ashx",
data: "text=" + text, //data to be passed
success: function (msg) {
$("#result").html(msg)
.fadeIn("fast");
)
}
});
return false;
});
});
Topic.ashx
public void ProcessRequest (HttpContext context) {
context.Response.ContentType = "text/html";
context.Response.Write("Hello World");
String topic_content = context.Request["text"];
context.Response.Write(topic_content);
}
错误
从客户端
检测到潜在危险的Request.Form值文本=“
<p>aaa</p>
“)。
答案 0 :(得分:0)
ASP.NET检查危险输入(HTML,Javascript的位)并通过抛出验证异常来阻止它。您可以通过HTML编码传入的txt来解决这个问题。通常的方法是使用Javascript函数:
function encodeHtml(text) {
encodedHtml = escape(text).replace(/\//g,"%2F")
.replace(/\?/g,"%3F")
.replace(/=/g,"%3D")
.replace(/&/g,"%26")
.replace(/@/g,"%40");
return encodedHtml;
}
在您的请求中传递值时使用它:
data: "text=" + encodeHtml(text), //data to be passed
在Topic.ashx的代码隐藏中,使用Server.HtmlDecode将其重新读入。
答案 1 :(得分:0)
ASP不会接受查询字符串中的脚本和html标记,您需要更改文本然后再将其恢复。 IMO最好的方法是JSON:
data:{ html: JSON.stringify(text)};
您可能需要为浏览器安装JSON插件。
您可以在代码中获取此信息:
var serialiser = new JavaScriptSerializer();
var html = serialiser.Deserialize(context.Request.QueryString["html"], typeof(string)); as string;
编辑:
在各种情况下尝试了这个,我建议也进行编码和解码。
data:{ html: JSON.stringify(encodeHtml(editor.getData()))};
您可以通过以下方式获取此信息:
var html = Server.UrlDecode(serialiser.Deserialize(context.Request.QueryString["html"], typeof(string)));
encodeHTML是Shah建议的一个功能:https://stackoverflow.com/a/9654774/1109858