如何从 jQuery 传递结构化数据?

发布于 2024-11-07 23:02:45 字数 1217 浏览 0 评论 0原文

这是我在 jQuery 中的代码

    function link() {


        var items = $.map($('.trSelected', grd), function (i) {
            return i.id.substr(3);
        });

        // alert(items.length);
        // alert(items.join(', '));


        $.ajax({ url: '/Pos/Link', type: 'POST', datatype: 'json',
            data: ( { PosId: '@Model.PosId', PosDetailIds: items } ),
            success: function (result) {
                grd.flexReload();                    
                alert('saved.');
            }
        });


    }

这是我在 ASP.NET MVC 控制器中的代码

    [HttpPost]
    public JsonResult Link(PosLink posLink) 
    {

        var svc = ServiceWirer.GetTxServiceInstance();
        svc.Pos_Link(posLink);

        return Json(new { HasError = false });
    }

由于我不知道的原因,只填充了 PosId,未填充 PosDetailIds

[更新]

@Raynos:

我什至尝试过这个,但是也不行:

public JsonResult Link(Guid PosId, Guid[] PosDetailIds) 

仅填充了 PosId,PosDetailIds 仍为 null

这是 PosLink 结构:

public class PosLink
{
    public Guid PosId { get; set; }
    public Guid[] PosDetailIds { get; set; }
}

Here's my code in jQuery

    function link() {


        var items = $.map($('.trSelected', grd), function (i) {
            return i.id.substr(3);
        });

        // alert(items.length);
        // alert(items.join(', '));


        $.ajax({ url: '/Pos/Link', type: 'POST', datatype: 'json',
            data: ( { PosId: '@Model.PosId', PosDetailIds: items } ),
            success: function (result) {
                grd.flexReload();                    
                alert('saved.');
            }
        });


    }

Here's my code in ASP.NET MVC controller

    [HttpPost]
    public JsonResult Link(PosLink posLink) 
    {

        var svc = ServiceWirer.GetTxServiceInstance();
        svc.Pos_Link(posLink);

        return Json(new { HasError = false });
    }

For reasons unknownst to me, only the PosId is populated, the PosDetailIds is not populated

[UPDATE]

@Raynos:

I even tried this, but no go too:

public JsonResult Link(Guid PosId, Guid[] PosDetailIds) 

Only the PosId is populated, the PosDetailIds is still null

Here's the PosLink structure:

public class PosLink
{
    public Guid PosId { get; set; }
    public Guid[] PosDetailIds { get; set; }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

念三年u 2024-11-14 23:02:45

我现在解决了它,我使用 jQuery 的 $.param

  $.ajax({ url: '/Pos/Link', type: 'POST', datatype: 'json',
        data: $.param( { PosId: '@Model.PosId', PosDetailIds: items }, true ),
        success: function (result) {
            grd.flexReload();                    
            alert('saved.');
        }
    });

更好:

  $.ajax({ url: '/Pos/Link', type: 'POST', datatype: 'json',
        traditional : true, // jQuery folks love PHP/Ruby very much :-)
        data:  { PosId: '@Model.PosId', PosDetailIds: items },
        success: function (result) {
            grd.flexReload();                    
            alert('saved.');
        }
    });

在这里找到原理: http://forum.jquery.com/topic/jquery-1-4-breaks-asp-net-mvc-parameter-posting

I solved it now, I used jQuery's $.param

  $.ajax({ url: '/Pos/Link', type: 'POST', datatype: 'json',
        data: $.param( { PosId: '@Model.PosId', PosDetailIds: items }, true ),
        success: function (result) {
            grd.flexReload();                    
            alert('saved.');
        }
    });

Way much better:

  $.ajax({ url: '/Pos/Link', type: 'POST', datatype: 'json',
        traditional : true, // jQuery folks love PHP/Ruby very much :-)
        data:  { PosId: '@Model.PosId', PosDetailIds: items },
        success: function (result) {
            grd.flexReload();                    
            alert('saved.');
        }
    });

Rationale found here: http://forum.jquery.com/topic/jquery-1-4-breaks-asp-net-mvc-parameter-posting

清风无影 2024-11-14 23:02:45

您无法将 JSON 绑定到开箱即用的方法参数。 参见这里有一个使用 ValueProviders 的解决方案

You can't bind JSON to method parameters out-of-the-box. See here for a solution using ValueProviders.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文