Json.stringify允许HTML元素

时间:2017-05-09 09:50:51

标签: javascript jquery json asp.net-mvc-4

我正在尝试将值从MVC视图发布到控制器。 应用程序启用了请求验证功能。

但是当我试图将带有HTML标签的值传递给控制器​​时,我没有任何异常。

这是我的ajax帖子:

       Group.Name = model.Name();
       Group.Id = model.ID();

        $.ajax({
            type: 'POST',
            url: /IndexController/SaveGroup',
            async: true,
            cache: false,
            dataType: "json",
            contentType: 'application/json; charset=utf-8',
            data: JSON.stringify({ Group: group }),

            success: function (data /*, textStatus, request*/) {
                try {

                }
                catch (error) {
                    showExceptionWindow('Jquery Error:' + error);

                }
            },
            error: function (request /*, status, error*/) {
                handleException(request.responseText);
            }
        });
    }

控制器代码:

  [HttpPost]
        public async Task<ActionResult> SaveGroup(Group group)
        {

当我尝试插入html标签时,值将传递给控制器​​操作方法并保存。

启用请求验证功能后,不应将html元素传递给控制器​​。

如何确保它在控制器处被阻止。

3 个答案:

答案 0 :(得分:0)

似乎你有一个拼写错误,因为JIRA-4208 BUGJIRA-31 ZEERA-273 BUGJIRA-33 JIRA-4209 似乎不是一个有效的对象,它是未定义的:

group

在你的后端:

data: JSON.stringify({ group: Group }), // <-----It should have to be this Group here

或者[HttpPost] public async Task<ActionResult> SaveGroup(Group group) // group is {} { 已经是一个对象,那么你可以直接对它进行字符串化:

Group

答案 1 :(得分:0)

MVC验证剂量工作,因为你已经改变了提交按钮以防止默认mvc使用jquery插件Validate.js只是通过我,这段代码应该工作

<html>
<head>
<meta charset="utf-8" />
<title>HBL</title>
<script src="https://unpkg.com/vue"></script>
<script src="esterno.js"></script>
</head>
<body>
  <div id="application">
     <greeting></greeting>
  </div>
</body>

答案 2 :(得分:0)

为什么不使用HTML解析器来检测HTML元素注入?这可以是一个干净的JS解决方案

var containsHTML = /<[a-z][\s\S]*>/i.test("<p>HTML text to be parsed</p>")
if(containsHTML==true){
    //There are HTML tags inside the string
}
else{
    //You're good to go
}