ASP.NET MVC 3 Json 模型与 3 级对象的绑定

发布于 2024-12-13 15:46:55 字数 680 浏览 3 评论 0原文

为什么 json 的 3 级嵌套模型绑定不起作用?

使用 2 个级别进行测试,例如在 LevelTwo 上添加字符串属性,可以工作,但 3 个级别则不行?这是设计使然、错误还是我遗漏了什么?

客户端 jQuery 帖子:

    $.ajax({
        url: "MyController/MyAction",
        dataType: "json",
        type: "POST",
        cache: false,
        data: {
            Level1: {
                Level2: {
                    StringValue: "Test"
                }
            }
        }
    });

服务器端模型:

public class MyForm
{
    public LevelOne Level1 { get; set; }
}

public class LevelOne
{
    public LevelTwo Level2 { get; set; }
}

public class LevelTwo
{
    public string StringValue { get; set; }
}

Why doesnt 3 level nesting model binding from json work?

Testing with 2 levels, say adding a string property on LevelTwo, works, but 3 levels doesnt? Is this by design, a bug, or am I missing something?

Client side jQuery post:

    $.ajax({
        url: "MyController/MyAction",
        dataType: "json",
        type: "POST",
        cache: false,
        data: {
            Level1: {
                Level2: {
                    StringValue: "Test"
                }
            }
        }
    });

Server side model:

public class MyForm
{
    public LevelOne Level1 { get; set; }
}

public class LevelOne
{
    public LevelTwo Level2 { get; set; }
}

public class LevelTwo
{
    public string StringValue { get; set; }
}

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

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

发布评论

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

评论(1

若有似无的小暗淡 2024-12-20 15:46:55

为什么 json 的 3 级嵌套模型绑定不起作用

您没有向服务器发送任何 JSON。如果您想发送 JSON 请求,请按以下方法操作:

$.ajax({
    url: "MyController/MyAction",
    contentType: 'application/json; charset=utf-8',
    dataType: "json",
    type: "POST",
    cache: false,
    data: JSON.stringify({ 
        Level1: { 
            Level2: { 
                StringValue: "Test" 
            } 
        } 
    })
});

JSON.stringify 方法将 javascript 文字序列化为 JSON 字符串。它是在现代浏览器中原生构建的。如果您需要支持旧版浏览器,您可以将 json2.js 脚本包含到您的页面中。

Why doesnt 3 level nesting model binding from json work

You are not sending any JSON to the server. If you want to send a JSON request here's how:

$.ajax({
    url: "MyController/MyAction",
    contentType: 'application/json; charset=utf-8',
    dataType: "json",
    type: "POST",
    cache: false,
    data: JSON.stringify({ 
        Level1: { 
            Level2: { 
                StringValue: "Test" 
            } 
        } 
    })
});

The JSON.stringify method is what serializes the javascript literal into a JSON string. It is natively built in modern browsers. If you need to support legacy browsers you could include the json2.js script to your page.

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