无法在$ .post()中的参数中传递html标记

时间:2013-07-05 09:04:12

标签: javascript asp.net-mvc asp.net-mvc-4

我在MVC 4中使用带有telerik radeditor的userControl。 我想提交radeditor的内容作为action方法,但是如果我使用editor.get_html(),代码就不会执行。

对action方法的javascript调用如下:

function Save() {
    var editor = $find("<%=radEdit.ClientID%>");          
    var editorHtmlContent = editor.get_html(); 
    var entityId = document.getElementById('hdEntityId').value;           
    var url = '<%=Url.Action("SaveNote", "staticController")%>';
    $.post(url, { EntityId: entityId, Desc: editorHtmlContent }, function (result) { });
}

任何线索?

1 个答案:

答案 0 :(得分:1)

发布HTML标记被视为安全威胁(HTML注入和跨站点脚本(XSS)),因此默认情况下会被阻止。你有三种方法:

  1. 在发送到服务器之前,在客户端编码HTML。你可以在SO上找到很多有关它的内容,例如:Fastest method to escape HTML tags as HTML entities?
  2. 如果您有强类型的模型类并希望获得实际的HTML,则可以使用AllowHtmlAttribute

    public class XMLModel
    {
        public int EntityId { get; set; }
    
        [AllowHtml]
        public string Desc { get; set; }
    }
    
  3. 最后一个选项是禁用整个操作的输入验证,可以使用ValidateInputAttribute完成:

    [ValidateInput(false)]
    [HttpPost]
    public ActionResult SaveNote(...)
    {
        ...
    }
    
  4. 您应该选择最适合您的选项。