Jquery ajax不在mvc中发布带有特殊字符的表单

时间:2018-04-04 18:56:16

标签: c# jquery ajax asp.net-mvc

我正在尝试使用jquery ajax发布整个表单。这是我的ajax电话:

 $(document).ready(function() {
        $('#btnadd').click(function () {
                $.ajax({
                    type: "POST",
                    url: "@Url.Action("SaveUser", "UserMenu")",                       
                    data: $('#SaveUserForm').serialize(),                                           
                    datatype: "json",
                    traditional: true,
                    success: function(d) {
                        var r = JSON.parse(d);
                        if (r.Result === 'true') {
                            //Wohoo its valid data and processed.
                            alert('success');
                        } else {
                            alert('not success');                                
                        }
                    },
                    error: function() {
                    }
                });             
        });
    });

当我发布没有特殊字符的表单时它很好用但是如果任何字段包含特殊字符(假设我有一个文本字段密码,包含字符<>)它不会触发控制器操作结果。 关于这个问题,我已经厌倦了许多解决方案,但对我来说,这项工作没有。

以下是我的控制器ActionResult,用于接收ajax请求:

    [HttpPost]
    [ValidateAntiForgeryToken]
    public async Task<JsonResult> SaveUser(AdminUserPanel model)
    {
      //some code for save into database
     return Json(new { Result = true });
    }

我是否需要更改我的Ajax功能或任何额外的设置(webconfig或其他)?

1 个答案:

答案 0 :(得分:0)

这是因为ASP.NET认为它是潜在的危险文本。 将[AllowHtml]属性用于特定字段

示例:

In [1384]: for k in dct:
      ...:     print dct[k]

In [1347]: df_A
Out[1347]: 
   A_1  A_2
0    1    0
1    1    0
2    0    1

In [1350]: df_B
Out[1350]: 
   B_1  B_2
0    0    0
1    0    1
2    1    1

In [1355]: df_C
Out[1355]: 
   C_1  C_2
0    0    0
1    1    1
2    1    0

或使用[ValidateInput(false)]进行整个操作

public class BlogEntry {
    public int UserId {get;set;}
    [AllowHtml] 
    public string BlogText {get;set;}
 }