我试图通过MVC模型将窗体发布到控制器中的Save函数中。我还在客户端使用tinymce,这会导致基于HTML代码的字符串,例如<p> Content text blah blah ...</p>。
<p> Content text blah blah ...</p>
问题是我无法发布包含以下内容的字符串,<p> something </p>但令人惊讶的是,< p > something < / p >此字符串(“ <”后带有空格)没有问题。但是,我无法处理此html代码并在每次发布之前都留出这些空格。肯定有更好的办法。
<p> something </p>
< p > something < / p >
因此,如何通过$ .post方法发布包含HTML代码的字符串?(如果您必须知道,该项目是一个内容管理系统。因此,我必须将基于HTML的内容文本保存到SQL表中。)通过调试,我看到,后期操作 甚 至 没有 到达Controller,我认为是唯一的JavaScript问题,对吗?
这是我正在使用的代码: Javascript
函数JqueryFromPost(formId){ var form = $(formId); var action = form.attr(“ action”); var serializedForm = form.serializeArray(); $ .post(action,serializedForm,function(data){ //在此处获取数据结果... }); }
CS代码
[HttpPost] 公共JsonResult SaveArticle(ArticleModel模型) { JsonResult JResult =新的JsonResult(); 如果(ModelState.IsValid) //我在此处进行保存,以“ JResult.Data =“ Success”;“结尾 (这也可能失败。因此,仅作解释) 返回JResult; }
ASP.NET具有内置的请求验证,可自动帮助防御XSS和HTML注入攻击。如果要显式禁用此验证,则可以使用[ValidateInput(false)]属性装饰要发布到的操作:
[ValidateInput(false)]
[HttpPost] [ValidateInput(false)] public ActionResult SaveArticle(ArticleModel model) { var JResult = new JsonResult(); if (ModelState.IsValid) { ... } return JResult; }
另外,如果要在ASP.NET 4.0上运行此命令,此属性才能生效,则需要在web.config中添加以下内容:
<httpRuntime requestValidationMode="2.0" />
而且,如果您使用的是ASP.NET MVC 3.0,则可以在需要HTML的模型上仅装饰带有[AllowHtml]属性的属性:
[AllowHtml]
public class ArticleModel { [AllowHtml] public string SomeProperty { get; set; } public string SomeOtherProperty { get; set; } }
另外,在您的javascript函数中,您可能希望serialize()代替serializeArray():
serialize()
serializeArray()
function JqueryFromPost(formId) { var form = $(formId); $.post(form.action, form.serialize(), function (data) { //Getting the data Result here... }); }