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

我试图通过MVC模型将Form发布到控制器中的Save函数中。 我也在客户端使用tinymce导致基于HTML代码的字符串,如

Content text blah blah ...

问题是我不能发布包含

something

的字符串

something

但令人惊讶的是,

something

这个字符串(在“<”之后带有空格)没有问题。 但是,我不能处理这个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){
       //获取数据结果在这里......
   });
 }

CS代码


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

        if(ModelState.IsValid)
            //我在这里以“JResult.Data =”成功“”结束保存  (这也可能是失败的。所以,它只是解释)

       返回JResult;
    }

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

  

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

 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... }); } 

您不应该使用ValidateInput(false)作为MSN在此处说: http : //msdn.microsoft.com/en-us/magazine/hh708755.aspx只需在您想要的html模型属性上使用[AllowHtml]

 [AllowHtml] public String htmlContainer { get; set; } 

另外我认为如果你编码html然后将其发布到服务器会更好。

使用[ValidateInput(false)]是一种非常糟糕的做法,导致许多安全漏洞,模型属性上的[AllowHtml]是更安全可靠的方法。 但是如果你不能使用模型属性,那么有一个更清洁的解决方案。

只需在客户端编码文本(mycase javascript ),在服务端解码它( 控制器 function )。 我使用下面的我的vb.net项目。

var SearchStringValue =

some blah...blah data

现在编码上面的变量。

var encodedSearchStringValue = window.escape(document.getElementById('SearchStringValue').value)

现在使用ajax将encodeSearchStringValue传递给控制器​​。

在控制器中只需变量进行解码即可获得

some blah...blah data

.

 Dim SearchStringValue = HttpUtility.UrlDecode(encodeSearchStringValue) 

希望这可以帮助……… :)