如果字符串包含HTML标记,则无法解析AJAX发布URL(500)

问题描述:

我试图将TinyMCE wysiwyg的内容发布到数据库插入的控制器函数中。这样的设置将始终显示无法加载资源:服务器回应500(内部服务器错误)的状态理由是在Chrome浏览/管理/ postnewarticle /在错误控制台中的数据路径:如果字符串包含HTML标记,则无法解析AJAX发布URL(500)

$.ajax({ 
    url: '/admin/postnewarticle/', 
    type: 'post', 
    dataType: 'json', 
    data: { 
     content: tinyMCE.get('article-content').getContent(), 
     title: $('#article-title').val(), 
     articleType: $('#article-types option:selected').val() 
    }, 
    success: function (result) { 
     // success stuff 
    } 
}); 

当我在Chrome中进行调试时,将tinyMCE.get('article-content').getContent()作为手表表达显示我在这里获得了期望的值:无论我在TinyMCE文本区域中写入了什么,都包含在<p>标记中。如果我用一些随机的静态字符串值替换“content”的值而没有任何HTML标签,控制器方法将正确执行。

这里是控制器的方法,我试图打:

[HttpPost] 
[Authorize(Roles = "Administrators")] 
[ValidateInput(false)] 
public JsonResult PostNewArticle(string title, HtmlString content, string articleType) 
{ 
    // do stuff 
} 

请注意,对于“内容”的数据类型这里是HtmlString ......这是从刚刚字符串,最终做了一些研究之后改变带领我here。但无论是字符串还是HtmlString,如果内容的值包含HTML标记,则该操作仍不会执行。

任何和所有帮助表示赞赏!

+0

哈哈,编者按:我的意思是不要说“用段落标记”在我的问题中间。我输入了字母p /括号,以致导致换行。 – AJH 2012-03-23 06:43:00

它可以帮助你把它

content: encodeURIComponent(tinyMCE.get('article-content').getContent()), 

之前URL编码您的内容,并把它返回到服务器端的实际字符串。

+1

谢谢!我只需要将控制器方法中“content”的数据类型更改回“string”,并且在视图中显示内容时使用“Server.UrlDecode(content)”而不是“content”,但仅此而已。 – AJH 2012-03-25 04:37:29

+0

感谢这个明确的解决方案(这也可以帮助其他人) – Thariama 2012-03-26 07:37:35