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

E-A*_*E-A 24 ajax asp.net-mvc jquery

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

问题是我不能发布包含的字符串<p> something </p>但令人惊讶的是,< p > something < / p >这个字符串(在"<"之后带有空格)没有问题.但是,我无法处理这个HTML代码并在每次发布之前创建这些空格.肯定有更好的办法.

那么,我如何通过$ .post方法发布包含HTML代码的字符串?(如果你必须知道,这个项目是一个内容管理系统.所以,我必须将基于HTML的内容文本保存到SQL表中.)我通过调试看到,后期操作没有到达控制器,我认为这是一个唯一的JavaScript问题,我是对的吗?

这是我正在使用的代码:
Javascript


function JqueryFromPost(formId) {

  var form = $(formId);
  var action = form.attr("action");
  var serializedForm = form.serializeArray();

  $.post(action, serializedForm, function (data) {
      //Getting the data Result here...
  });
}

CS代码


   [HttpPost]
   public JsonResult SaveArticle(ArticleModel model)
   {
       JsonResult JResult = new JsonResult();

       if (ModelState.IsValid)
           //I do the saving here ending with "JResult.Data = "Success";" (this could also be Failed. So, its just to explain)

       return JResult;
   }

Dar*_*rov 53

ASP.NET具有内置的请求验证功能,可自动帮助防止XSS和HTML注入攻击.如果要显式禁用此验证,可以使用以下[ValidateInput(false)]属性修饰要发布到的操作:

[HttpPost]
[ValidateInput(false)]   
public ActionResult SaveArticle(ArticleModel model)
{
    var JResult = new JsonResult();
    if (ModelState.IsValid)
    {
        ...
    }
    return JResult;
}
Run Code Online (Sandbox Code Playgroud)

此外,如果您在ASP.NET 4.0上运行此命令以使此属性生效,则需要将以下内容添加到web.config:

<httpRuntime requestValidationMode="2.0" />
Run Code Online (Sandbox Code Playgroud)

如果您使用的是ASP.NET MVC 3.0,则只能在模型上修饰需要具有以下[AllowHtml]属性的HTML的属性:

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

    public string SomeOtherProperty { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

同样在你的javascript函数中你可能想要serialize()而不是serializeArray():

function JqueryFromPost(formId) {
    var form = $(formId);
    $.post(form.action, form.serialize(), function (data) {
        //Getting the data Result here...
    });
}
Run Code Online (Sandbox Code Playgroud)

  • 很有帮助.但我在没有`<httpRuntime requestValidationMode ="2.0"/>`的.NET 4.0中使用它 (3认同)

QMa*_*ter 5

您不应该使用 ValidateInput(false),正如 MSN 所说: http: //msdn.microsoft.com/en-us/magazine/hh708755.aspx 只需[AllowHtml]在您想要获取 html 的模型属性上使用即可。

[AllowHtml]
public String htmlContainer { get; set; }
Run Code Online (Sandbox Code Playgroud)

另外,我认为如果你对 html 进行编码然后将其发布到服务器,那就更好了。