ASP.Net MVC 3 JsonValueProviderFactory 与接受数组参数的控制器方法存在问题

发布于 2024-10-23 21:12:08 字数 325 浏览 1 评论 0原文

我允许 JsonValueProviderFactory 填充我的控制器操作的参数。其中一个参数是一个 Cat 数组。 这是可行的,但有时当只有一个 Cat 时,它不会作为数组传入,参数只是 Cat。我正在使用 ExtJs,它在客户端处理所有事情。

有没有办法处理这个服务器端?或者我是否需要破解来自 ExtJs 的请求以强制它始终发送数组?

    [HttpPost]
    public ActionResult Edit(int id, IEnumerable<Cat> Data){...}

I am allowing JsonValueProviderFactory to populate the parameters of my controller action. One of the parameters is an array of Cat.
This works, but sometimes when there is only a single Cat it doesn't get passed in as an array, the argument is just Cat. I am using ExtJs, which is handling everything clientside.

Is there a way to handle this server-side? Or will I need to hack the request from ExtJs to force it to always send an array?

    [HttpPost]
    public ActionResult Edit(int id, IEnumerable<Cat> Data){...}

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

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

发布评论

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

评论(2

我做我的改变 2024-10-30 21:12:08

如果您有一只猫,则正确的 JSON 请求应如下所示:

{ 'id': '123', 'Data': [ { 'Name': 'Felix', 'Age': 6 } ] }

对于多只猫:

{ 'id': '123', 'Data': [ { 'Name': 'Felix', 'Age': 6 }, { 'Name': 'Morgan', 'Age': 2 } ] }

A proper JSON request should look like this if you have a single cat:

{ 'id': '123', 'Data': [ { 'Name': 'Felix', 'Age': 6 } ] }

and for multiple cats:

{ 'id': '123', 'Data': [ { 'Name': 'Felix', 'Age': 6 }, { 'Name': 'Morgan', 'Age': 2 } ] }
俏︾媚 2024-10-30 21:12:08

MVC 尝试将 Cat 的单个实例绑定到 Cat 的实例,而不是 IEnumerable。传递数组。

如果你想在服务器端处理它,你总是可以:

List<Cat> cats = new List<Cat>;
cats.Add(argCat);
...

由于你的控制器参数是 IEnumerable,所以看起来你无论如何都在期待一组数据。如果有商业意义,也许可以考虑为单个实例使用单独的控制器操作。

MVC is attempting to bind the single instance of Cat to just that, an instance of Cat and not IEnumerable. Pass the array.

If you want to handle it server side, you could always:

List<Cat> cats = new List<Cat>;
cats.Add(argCat);
...

Since your controller argument is IEnumerable, it would seem you're expecting a set of data anyway. Maybe consider a separate controller action for the single instance if it makes business sense.

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