c# - 如何将带有 JSON、jQuery 的复杂对象数组发布到 ASP.NET MVC Controller ?

标签 c# javascript jquery asp.net-mvc json

我当前的代码如下所示。如何将我的数组传递给 Controller ​​,我的 Controller Action 必须接受什么样的参数?

function getplaceholders() {
    var placeholders = $('.ui-sortable');
    var result = new Array();
    placeholders.each(function() {
        var ph = $(this).attr('id');
        var sections = $(this).find('.sort');
        var section;

        sections.each(function(i, item) {
            var sid = $(item).attr('id');

            result.push({ 'SectionId': sid, 'Placeholder': ph, 'Position': i });
        });
    });
    alert(result.toString());
    $.post(
        '/portal/Designer.mvc/SaveOrUpdate',
        result,
        function(data) {
            alert(data.Result);
        }, "json");
};

我的 Controller Action 方法看起来像

public JsonResult SaveOrUpdate(IList<PageDesignWidget> widgets)

最佳答案

我找到了解决方案。我使用 Steve Gentile 的解决方案, jQuery and ASP.NET MVC – sending JSON to an Action – Revisited .

我的 ASP.NET MVC View 代码如下所示:

function getplaceholders() {
        var placeholders = $('.ui-sortable');
        var results = new Array();
        placeholders.each(function() {
            var ph = $(this).attr('id');
            var sections = $(this).find('.sort');
            var section;

            sections.each(function(i, item) {
                var sid = $(item).attr('id');
                var o = { 'SectionId': sid, 'Placeholder': ph, 'Position': i };
                results.push(o);
            });
        });
        var postData = { widgets: results };
        var widgets = results;
        $.ajax({
            url: '/portal/Designer.mvc/SaveOrUpdate',
            type: 'POST',
            dataType: 'json',
            data: $.toJSON(widgets),
            contentType: 'application/json; charset=utf-8',
            success: function(result) {
                alert(result.Result);
            }
        });
    };

我的 Controller Action 被自定义属性修饰

[JsonFilter(Param = "widgets", JsonDataType = typeof(List<PageDesignWidget>))]
public JsonResult SaveOrUpdate(List<PageDesignWidget> widgets

可以找到自定义属性的代码 here (链接现在断开了)。

由于链接已损坏,这是 JsonFilterAttribute 的代码

public class JsonFilter : ActionFilterAttribute
{
    public string Param { get; set; }
    public Type JsonDataType { get; set; }
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        if (filterContext.HttpContext.Request.ContentType.Contains("application/json"))
        {
            string inputContent;
            using (var sr = new StreamReader(filterContext.HttpContext.Request.InputStream))
            {
                inputContent = sr.ReadToEnd();
            }
            var result = JsonConvert.DeserializeObject(inputContent, JsonDataType);
            filterContext.ActionParameters[Param] = result;
        }
    }
}

JsonConvert.DeserializeObject 来自 Json.NET

链接:Serializing and Deserializing JSON with Json.NET

关于c# - 如何将带有 JSON、jQuery 的复杂对象数组发布到 ASP.NET MVC Controller ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/320291/

相关文章:

c# - 如何将包含在 dll 中的组件嵌入到 exe 中,以便它可以从内存中运行?

c# - 如何在 ASP.NET 中创建堆积柱形图?

javascript - 使用动态脚本加载 JSON 数据 - 跨域 - CORS 不可用

javascript - 在图片上添加悬停效果

c# - 在 C# 应用程序中的选定位置创建 txt 文件

javascript - 单元测试 javascript(非节点)

javascript - node.js Q Promise 不会通过拒绝处理程序传播异常

javascript - 加载消息和设置超时

jquery - 模型和列表框

c# - 在已经正常运行的应用程序中的 WPF/C# 中撤消重做