使用AJAX将动态数据传递到MVC控制器

尤斯特姆

如何通过调用传递dynamic数据AJAXMVC Controller

Controller

public JsonResult ApplyFilters(dynamic filters){
   return null;
}

AJAX呼叫:

$(':checkbox').click(function (event) {
    var serviceIds = $('input[type="checkbox"]:checked').map(function () {
        return $(this).val();
    }).toArray();

    //alert(serviceIds);

    $.ajax({
        type: 'GET',
        url: '/home/ApplyFilters',
        data: JSON.stringify({
            name: serviceIds
        }),
        contentType: 'application/json',

        success: function (data) {
            alert("succeeded");
        },
        error: function (err, data) {
            alert("Error " + err.responseText);
        }
    });

    //return false;
});

理想情况是,filters将包含serviceIds作为属性

例如这样的:filters.ServiceIds我有另外一个过滤器的日期范围和一个将被添加像这样:filters.DateRange

服务器端将过滤器作为dynamic对象ApplyFilters()

空气

据我所知,默认的ASP MVC模型绑定程序无法完成这样的事情。

幸运的是,有很多解决方案,其中有两个:

1是第一个,它将JSON数据转换为IDictionary<string, object>实例,然后再将其传递给控制器​​操作。您最终将得到:

public JsonResult ApplyFilters(IDictionary<string, object> filters)
{
   return null;
}

2第二种方法让您的控制器动作接收JsonValue实例。使您的操作看起来像这样:

public JsonResult ApplyFilters([DynamicJson]JsonValue filters)
{
   return null;
}

3根据先前的教程,您可以创建自己的返回动态对象的自定义模型活页夹。以下代码摘自第一个提案,并经过修改以生成动态对象。这只是为了说明想法,请勿按原样使用它:

public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
    if (!controllerContext.HttpContext.Request.ContentType.StartsWith("application/json", StringComparison.OrdinalIgnoreCase))
    {
        return null;
    }

    controllerContext.HttpContext.Request.InputStream.Position = 0;
    using (var reader = new StreamReader(controllerContext.HttpContext.Request.InputStream))
    {
        var json = reader.ReadToEnd();
        if (string.IsNullOrEmpty(json))
        {
            return null;
        }
        dynamic result = new ExpandoObject();
        var deserializedObject = new JavaScriptSerializer().DeserializeObject(json) as IDictionary<string, object>;
        if (deserializedObject != null)
        {
            foreach (var item in deserializedObject)
            {
                ((IDictionary<string, object>)result).Add(item.Key, item.Value);
            }
        }
        return result;
    }
}

这些解决方案依赖于构建自定义模型联编程序来处理这种特殊情况:

  • 自定义模型绑定器只是IModelBinder接口的实现,该接口负责解析JSON发布的数据并将其转换为另一种格式。
  • 告知ASP MVC框架通过注册这些特定的自定义模型绑定程序(使用ModelBinders.Binders.Add或使用专用属性(CustomModelBinderAttribute来使用它们

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用$ .ajax(MVC 4)将数据传递到控制器

来自分类Dev

使用RadioButton将复杂数据传递到MVC5中的控制器

来自分类Dev

使用Ajax将表单数据传递到控制器方法

来自分类Dev

MVC5使用Ajax将文本数据传递给控制器

来自分类Dev

AJAX未将数据传递到CodeIgniter控制器

来自分类Dev

Ajax发布不会将任何数据传递到MVC控制器

来自分类Dev

将数据传递到标签栏控制器

来自分类Dev

AngularModalService:将数据传递到控制器

来自分类Dev

如何将JavaScript数据传递到控制器ASP.NET MVC

来自分类Dev

使用Storyboard Segue iOS将数据传递到视图控制器

来自分类Dev

使用Storyboard Segue iOS将数据传递到视图控制器

来自分类Dev

如何使用角度ui模态将数据传递到控制器?

来自分类Dev

Laravel使用Ajax将数据传递给控制器

来自分类Dev

Laravel 使用控制器参数与请求将数据传递给控制器

来自分类Dev

将数据从Ajax传递到MVC控制器-空参数错误

来自分类Dev

如何将数据从Ajax JavaScript传递到MVC控制器?

来自分类Dev

将数据从javaScript传递到MVC控制器视图ajax

来自分类Dev

将数据从javascript传递到MVC控制器

来自分类Dev

将数据传递到Codeigniter中的控制器后,如何使用新的URL调用视图?

来自分类Dev

使用AJAX和带有Codeigniter的jquery将表单数据传递给控制器

来自分类Dev

下拉列表未将数据传递到控制器

来自分类Dev

视图到控制器数据传递

来自分类Dev

使用Ajax将值从MVC视图传递到控制器

来自分类Dev

使用 Spring MVC 将值从 AJAX 传递到控制器

来自分类Dev

AngularJS +1.5父控制器如何将数据传递到组件控制器

来自分类Dev

如何将数据传递到导航控制器中嵌入的集合视图控制器

来自分类Dev

将数据传递到导航控制器中的另一个视图控制器

来自分类Dev

如何将数据传递到ng-include控制器?

来自分类Dev

将数据传递到Sails.js中的默认控制器

Related 相关文章

  1. 1

    使用$ .ajax(MVC 4)将数据传递到控制器

  2. 2

    使用RadioButton将复杂数据传递到MVC5中的控制器

  3. 3

    使用Ajax将表单数据传递到控制器方法

  4. 4

    MVC5使用Ajax将文本数据传递给控制器

  5. 5

    AJAX未将数据传递到CodeIgniter控制器

  6. 6

    Ajax发布不会将任何数据传递到MVC控制器

  7. 7

    将数据传递到标签栏控制器

  8. 8

    AngularModalService:将数据传递到控制器

  9. 9

    如何将JavaScript数据传递到控制器ASP.NET MVC

  10. 10

    使用Storyboard Segue iOS将数据传递到视图控制器

  11. 11

    使用Storyboard Segue iOS将数据传递到视图控制器

  12. 12

    如何使用角度ui模态将数据传递到控制器?

  13. 13

    Laravel使用Ajax将数据传递给控制器

  14. 14

    Laravel 使用控制器参数与请求将数据传递给控制器

  15. 15

    将数据从Ajax传递到MVC控制器-空参数错误

  16. 16

    如何将数据从Ajax JavaScript传递到MVC控制器?

  17. 17

    将数据从javaScript传递到MVC控制器视图ajax

  18. 18

    将数据从javascript传递到MVC控制器

  19. 19

    将数据传递到Codeigniter中的控制器后,如何使用新的URL调用视图?

  20. 20

    使用AJAX和带有Codeigniter的jquery将表单数据传递给控制器

  21. 21

    下拉列表未将数据传递到控制器

  22. 22

    视图到控制器数据传递

  23. 23

    使用Ajax将值从MVC视图传递到控制器

  24. 24

    使用 Spring MVC 将值从 AJAX 传递到控制器

  25. 25

    AngularJS +1.5父控制器如何将数据传递到组件控制器

  26. 26

    如何将数据传递到导航控制器中嵌入的集合视图控制器

  27. 27

    将数据传递到导航控制器中的另一个视图控制器

  28. 28

    如何将数据传递到ng-include控制器?

  29. 29

    将数据传递到Sails.js中的默认控制器

热门标签

归档