2011-04-27 109 views
6

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

所以,对于一个称为MyParam具有属性A类& B,I如何可以构造查询字符串,将数据传递到下面的控制器方法:

public ActionResult MyMethod(List<MyParam> ParamList) 

我使用MVC架构的RedirectToAction试图和RedirectToResult看看它是怎么回事,但我认为我的MVC的nbbness使我犯了一个错误,因为它从来没有正确传递数据,MyMethod对参数总是为null。

在此先感谢!

回答

9

如果您希望默认模型联编程序成功将请求解析为强类型的对象数组,则可能会发现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) { ... } 
+0

它绑定,但不实际传递数据。我只是得到每个对象的默认值。 – dudemonkey 2011-04-27 15:19:37

+0

@dudemonkey,这应该工作,我几乎每天都在使用它。查看博客文章,其中提供了具体的例子,并仔细检查你是否有错别字。 – 2011-04-27 15:20:53

+0

你是对的。在我的代码中,我没有属性的accessor(get/set)方法。一旦我将它们添加进去,它就可以完美运行。 – dudemonkey 2011-04-27 15:25:37

0

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

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

+0

不幸的是,根据要求,它必须是GET。一切都必须通过查询字符串传递,因为这将由不成熟的客户使用。 – dudemonkey 2011-04-27 15:10:56

+0

我会问,但我们会在午餐时间向你和你的问题喝酒。抱歉。 – 2011-04-27 15:13:09

+0

我会采取的:)谢谢 – dudemonkey 2011-04-27 15:14:50

0

我发现JsonValueProvider工作比正常ValueProvider更好的结合一个列表。只需将数据转换成JSON对象,像这样:

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

而且JsonValueProvider将完成剩余的工作。假设您有能力说“将此数据发布为Json”。

我也不否认这是否是一个好主意。

相关问题