【问题标题】:Json.stringify allows HTML elementsJson.stringify 允许 HTML 元素
【发布时间】:2017-05-09 09:50:51
【问题描述】:

我正在尝试将值从 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元素传递给控制器​​。

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

【问题讨论】:

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


    【解决方案1】:

    MVC 验证确实有效,因为您更改了提交按钮以防止默认 mvc 使用 jquery 插件 Validate.js 只需通过 i,此代码应该可以工作

    var form = $("#YourFormID"); 
            form.validate();
            form.submit(function (e) {
                e.preventDefault();
                if (form.valid()) {
    
                  //Your ajax call
    
                     }  
            })
    

    【讨论】:

    • 即使我尝试将按钮类型更改为“提交”,但仍然没有发生验证
    【解决方案2】:

    似乎你有一个错字,因为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已经是一个对象,那么你可以直接将它字符串化:

    data: JSON.stringify(Group), // <-----It should have to be this Group here
    
    [HttpPost]
        public async Task<ActionResult> SaveGroup(Group Group) // group is {}
        {
    

    【讨论】:

    • 感谢您的回复。但我担心为什么没有发生 MVC 验证并允许 HTML 元素作为请求验证功能启用。
    【解决方案3】:

    为什么不使用 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
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-23
      • 2020-04-23
      • 1970-01-01
      • 1970-01-01
      • 2013-07-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多