2011-04-27 120 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」。

我也不否認這是否是一個好主意。

相關問題