gpt4 book ai didi

c# - 将具有嵌套属性的 javascript 对象发布到 MVC

转载 作者:行者123 更新时间:2023-11-28 01:14:19 25 4
gpt4 key购买 nike

我在我的应用程序中定义了一个对象,如下所示:

public class Request
{
string LookupName { get; set; }
PageData PageData { get; set; }
}

public class PageData
{
int Page { get; set; }
int PageSize { get; set; }
}

操作方法如下所示:

[HttpPost]
public ActionMethod DoLookup(Request req)
{
...
...
return new ContentResult(...);
}

我正在尝试使用 JQuery + Javascript 将信息发布到操作,除了嵌套属性之外,一切都运行良好:

// javascript...
var reqData = {};
reqData.LookupName = "abc";
reqData.PageData= { Page:1, PageSize:10 };

$.post("/Controller/DoLookup", reqData, function(data) {
...
});

这工作得很好,除了“PageData”中的嵌套属性之外,所有内容都很好地发布到 Controller 。 Request 中的 PageData 实例似乎只是一个默认实例,因为 Page 和 PageSize 属性均为 0。如果我在 javascript 中省略“PageData”,那么它在 Controller 上将为 null。

这看起来有点奇怪,因为显然 MVC 认识到 PageData 有一些信息,但似乎没有实际分配属性。我是否做错了什么,或者有什么方法可以找到/使用自定义模型绑定(bind)器来使其正常工作?

注意:
请注意,这里没有提到 JSON。我知道我可以转换大量代码+使用 JSON 等。这是我目前不想解决的路径,除非这是唯一可能的选择。

最佳答案

看看 $.post 正在使用 fiddler、wireshark 等为您整理的请求。您的帖子正文将类似于

LookupName=abc&PageData%5BPage%5D=1&PageData%5BPageSize%5D=10

就好像它被包装在 Stringify 中一样,服务器接收到它

{"LookupName":"abc","PageData":{"Page":1,"PageSize":10}}

这里有趣/令人沮丧的事情是,在这两种情况下,asp.net MVC 都会尝试将传入数据反序列化到复杂对象中。但在第一种情况下,它对子复杂对象一无所知/失败。

我对购物车对象也有同样的问题。 MVC 仍然可以很好地获取主对象的属性,但我的子数组/对象为空。

如果你想保持前端代码相同,那么你需要在后端编写一个自定义反序列化器。这似乎很快就会变得困惑。作为一个有趣的实验,将您的终点更改为仅接收一个字符串,然后看看最终会得到什么。

您还可以编写一个 Web 处理程序来拦截您的传入流量,然后再由 Controller 自行处理。

关于c# - 将具有嵌套属性的 javascript 对象发布到 MVC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24019137/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com