小编典典

使用ASP.net MVC和JQuery将HTML标签(代码)发布为字符串

ajax

我试图通过MVC模型将窗体发布到控制器中的Save函数中。我还在客户端使用tinymce,这会导致基于HTML代码的字符串,例如<p> Content text blah blah ...</p>

问题是我无法发布包含以下内容的字符串,<p> something </p>但令人惊讶的是,< p > something < / p >此字符串(“
<”后带有空格)没有问题。但是,我无法处理此html代码并在每次发布之前都留出这些空格。肯定有更好的办法。

因此,如何通过$
.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;
   }

阅读 159

收藏
2020-07-26

共1个答案

小编典典

ASP.NET具有内置的请求验证,可自动帮助防御XSS和HTML注入攻击。如果要显式禁用此验证,则可以使用[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]属性的属性:

public class ArticleModel 
{
    [AllowHtml]
    public string SomeProperty { get; set; }

    public string SomeOtherProperty { get; set; }
}

另外,在您的javascript函数中,您可能希望serialize()代替serializeArray()

function JqueryFromPost(formId) {
    var form = $(formId);
    $.post(form.action, form.serialize(), function (data) {
        //Getting the data Result here...
    });
}
2020-07-26