当前位置: 首页 > 面试题库 >

如何使用JSON,jQuery将复杂对象数组发布到ASP.NET MVC Controller?

公西志文
2023-03-14
问题内容

我当前的代码如下所示。如何将数组传递给控制器​​,控制器动作必须接受哪种参数?

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");
};

我的控制器动作方法看起来像

public JsonResult SaveOrUpdate(IList<PageDesignWidget> widgets)

问题答案:

我找到了解决方案。我使用了Steve Gentile,jQuery和ASP.NETMVC的解决方案-将JSON发送到Action-Revisited。

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

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);
            }
        });
    };

并且我的控制器动作装饰有一个自定义属性

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

可在此处找到自定义属性的代码(该链接现在已断开)。

由于链接断开,因此这是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



 类似资料:
  • 问题内容: 但是解决方案似乎不适合我的问题。 这是我的HTML。行数是可变的: JS构建一个对象数组并将其发布到控制方法中: 每行代表一个WorkPlanItem。 我的目标是将它们全部发布到我的控制器以更新它们。 我似乎无法弄清楚如何在控制器方法(AjaxUpdate)中访问数组。 问题答案: 您可以按Vikas发布的方式对表格进行序列化,或者,如果您希望遍历页面(如当前操作)并使用数组,可以使

  • 问题内容: 我创建了一个需要发布到jersey的json,这是由grizzly运行的具有REST网络服务的服务器获取需要输出的传入json对象。我正在尝试,但不确定如何正确实施。 我有一个在加载时运行此方法的html文件 问题答案: 要将json发送到服务器,首先必须创建json 这就是构造ajax请求以将json作为post var发送的方式。 json现在将在post var中。

  • 问题内容: 我想在Zepto或Jquery中用$ .ajax发布一个对象数组。两者都表现出相同的奇数错误,但我找不到我做错的事情。 使用“ RestEasy”之类的测试客户端发送数据时,数据会保存到服务器,并且我可以在浏览器的网络面板中看到请求被篡改,因此我相信JS是罪魁祸首。 如果我将对象数组作为POST的data属性发送,则不能正确发送它们。 数据对象: 请求: 在浏览器中看到的请求正文: 可

  • 问题内容: 我正在寻找一种通过JSON将对象数组发布到MVC3的解决方案。 我正在处理的示例代码:http : //weblogs.asp.net/scottgu/archive/2010/07/27/introducing-asp-net- mvc-3-preview-1.aspx JS: ListViewModel.cs: ItemViewModel.cs: ListController.cs

  • 问题内容: 我一直在寻找这个小时,却没有找到答案。在燃烧之前,请仔细阅读整个问题!:) 我有类似这样的表格: 并且需要能够将其序列化为: 我在SO上尝试过大多数答案,包括jquery-json库,并且大多数返回如下所示: 这是 我不能使用的 东西!:P 提前谢谢大家。 问题答案: 试试我为您编写的这段代码…仅使用您的数据结果,对我来说效果很好。您可以对其进行处理,并制作一个简单的jQuery插件…

  • 问题内容: 我如何/可以将json对象传递给webapi控制器(POST),并且 没有 类可将其映射到,而是将其作为任意内容来处理? 因此,如果我像这样从客户那里传递消息: 数据是这样的: 我的控制器将能够解析吗?下次数据可能与该签名不匹配(例如: 在我的控制器中,我尝试过: 和: 和(因为这实际上是与mongo数据库一起使用): 但是看起来对象映射器想要映射到字符串以外的其他东西… 问题答案: