2012-01-20 22 views
2

我試圖重構一些我的代碼,我想知道是否有可能是這樣的:是否可以在mvc 3中將對象作爲路由值傳遞?

這是我CSHTML的一部分:

<a href="@Url.Action("Vote", "Ideas", new { id = item.Idea.Id, pageMetadata = Model.PageMetadata, numberOfVotes = 2 })"> 

這是調用動作:

public ActionResult Vote(string id,PageMetadata pageMetadata, int numberOfVotes = 1) 

PageMetadata是我的課。

當im debbuging在cshtml網站pageMetadata是正確的,但當行動正在調用pageMetadata它變成null。我有些愚蠢的錯誤還是所有的想法都是錯誤的? 感謝您的幫助。

回答

6

查詢字符串就像字典:{鍵,值}對。因此,您無法在查詢字符串中傳遞您的類對象。

但是,你可以做的是將這個id傳給你的模型對象,然後使用該id將你的對象加載到服務器上。

現在,你正在做一個錯誤的概念! :-)其他

+0

你能舉一個你如何從一個ID加載模型對象的例子嗎? –

1

一種選擇是,序列化/反序列化,例如對象:

<a href="@Url.Action("Vote", "Ideas", new { id = item.Idea.Id, pageMetadata = JsonConvert.SerializeObject(Model.PageMetadata), numberOfVotes = 2 })"> 

控制器:

public ActionResult Vote(string id,string pageMetadata, int numberOfVotes = 1) 

var pageMetadataObj = JsonConvert.DeserializeObject<PageMetadata>(pageMetadata) 

注:這將暴露你的對象屬性的瀏覽器,可以根據對象的數量和類型爲網頁添加相當大的尺寸。

相關問題