首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >将HTML标记(代码)作为字符串使用ASP.NET MVC和JQuery

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

Stack Overflow用户
提问于 2018-02-26 01:11:44
回答 2查看 0关注 0票数 0

我试图通过MVC模型将表单发布到控制器中的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){

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

  $ .post(action,serializedForm,function(data){
      //获取数据结果在这里...
  });
}

CS代码

代码语言:javascript
复制
   [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;
   }
EN

回答 2

Stack Overflow用户

发布于 2018-02-26 09:53:28

ASP.NET有内置的请求验证,自动帮助防止XSS和HTML注入攻击。如果要显式禁用此验证,可以使用[ValidateInput(false)]属性:

代码语言:txt
复制
[HttpPost]
[ValidateInput(false)]   
public ActionResult SaveArticle(ArticleModel model)
{
    var JResult = new JsonResult();
    if (ModelState.IsValid)
    {
        ...
    }
    return JResult;
}

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

代码语言:txt
复制
<httpRuntime requestValidationMode="2.0" />

如果使用ASP.NETMVC 3.0,则只能使用[AllowHtml]属性:

代码语言:txt
复制
public class ArticleModel 
{
    [AllowHtml]
    public string SomeProperty { get; set; }

    public string SomeOtherProperty { get; set; }
}

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

代码语言:txt
复制
function JqueryFromPost(formId) {
    var form = $(formId);
    $.post(form.action, form.serialize(), function (data) {
        //Getting the data Result here...
    });
}
票数 0
EN

Stack Overflow用户

发布于 2018-02-26 10:24:04

你不应该使用ValidateInput(false),因为MSN在这里说:http : //msdn.microsoft.com/en-us/magazine/hh708755.aspx 只需使用[AllowHtml]

代码语言:javascript
复制
[AllowHtml]
public String htmlContainer { get; set; }

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100007429

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档