通过查询字符串将对象列表传递给MVC控制器

时间:2011-04-27 15:00:46

标签: c# asp.net-mvc

我有一种情况需要将对象列表传递给MVC控制器,但我不确定如何在查询字符串中格式化它。我想要这样做的原因是因为它不是一个Web应用程序,它是一个通过查询字符串接受数据并将其路由到执行工作的控制器的Web服务。

因此,给定一个名为MyParam的类,其属性为A& B,我如何构造一个将数据传递给以下控制器方法的查询字符串:

public ActionResult MyMethod(List<MyParam> ParamList)

我已经尝试将MVC框架用于RedirectToAction和RedirectToResult以查看其出现的内容,但我认为我的MVC n00bness导致我犯了一个错误,因为它从未正确传递数据并且MyMethod始终为null参数。

提前致谢!

3 个答案:

答案 0 :(得分:11)

如果希望默认模型绑定器成功地将请求解析为强类型对象数组,您可能会发现following blog post对您需要使用的列表的有线格式很有用。查询字符串示例:

[0].Title=foo&[0].Author=bar&[1].Title=baz&[1].Author=pub...

其中:

public class Book
{
    public string Title { get; set; }
    public string Author { get; set; }
}

将成功绑定到:

public ActionResult MyMethod(IEnumerable<Book> books) { ... }

答案 1 :(得分:0)

好的,根据提供的信息,我认为你不想要你想要的东西。在您的客户端的情况下,您将数据POST到控制器。不使用查询字符串。

好,因为你必须使用querystring。我的新答案: 序列化对象,将其转换为base64字符串并传递它,然后将其转换回来。

答案 2 :(得分:0)

我发现JsonValueProvider比普通的ValueProvider更好地绑定到列表。只需将数据转换为JSON对象,如下所示:

<YourRoute>?ParamList=[{SomeProperty:'Value'},{SomeProperty:'Value'}];

JsonValueProvider会处理剩下的事情。这假设您有能力说“将此数据发布为Json”。

我也不赞成这是不是一个好主意。