我正在使用jquery text editor插件来创建html标记。我在js变量中使用文本编辑器创建的标记,并使用ajax调用将该变量发布到服务器。
在cshtml中标记:
<div>
<div id="textEditor">@Html.Raw(Model.htmlMarkUp)</div>
</div>
<input type="button" value="Save" onclick="SaveChanges();" />
JS:
$(document).ready(function () {
$('#textEditor').jqte();
});
function SaveChanges(){
var txtContent = $(".jqte_editor").html();//.jqte_editor is the div added by plugin
var path = '/Pages/saveChanges';
$.ajax({
type: "POST",
url: path,
data: { htmlMarkUp: txtContent },
success: function (result) { alert(result) },
error: function () { }
});
}
型号:
public class MyModel
{
public string htmlMarkUp{ get; set; }
}
控制器:
public string saveChanges(MyModel oModel)
{
....
}
问题:
正确调用操作结果,除非我不使用插件中提供的任何美化工具,即如果我在文本编辑器中编写了一个简单的纯文本,则ajax调用正常工作但是如果我使用任何一个像粗体工具这样的工具,ajax调用停止工作。
首先我认为这是由于web配置中json大小的限制,但这也不是问题。
为了指定json大小,我在web.config中写了如下:
<system.web.extensions>
<scripting>
<webServices>
<jsonSerialization maxJsonLength="5000">
</jsonSerialization>
</webServices>
</scripting>
</system.web.extensions>
问题与标记大小无关。问题是当我使用任何工具时,如文本编辑器插件的粗体斜体。
出了什么问题
提前致谢。
答案 0 :(得分:1)
我遇到了问题。问题不在于文本编辑器,而在于asp安全性。 每当我试图通过ajax将html内容(包含html标签)发送到我的服务器时,服务器就拒绝这样的请求。
当我没有使用任何文本编辑器工具时,它被认为是纯字符串,但是只要我使用任何工具(如粗体工具),我收集文本编辑器标记的变量也有html标记。由于安全问题,当到达服务器时这样的参数被服务器拒绝。
因此,为了跳过此安全检查,我将以下属性添加到我的操作结果中:
[ValidateInput(false)]
public string saveChanges(MyModel oModel)
{
....
}
这是服务器端解决方案。 您还可以通过将变量编码为base64编码来处理客户端问题:
var txtContent = $(".jqte_editor").html();
var encodedHtml = $.base64.encode(txtContent );
答案 1 :(得分:0)
您需要序列化文本编辑器的内容
$.ajax({
type: "POST",
url: path,
data: $('.jqte_editor').serialize(),
success: function (result) { alert(result) },
error: function () { }
});
此外,您的SaveChanges方法是否具有[Post]属性?
我在数据大小方面遇到了类似问题,并使用了appSetting
<appSettings>
<add key="aspnet:MaxJsonDeserializerMembers" value="150000" />
</appSettings>