2012-01-20 20 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) 

注:这将暴露你的对象属性的浏览器,可以根据对象的数量和类型为网页添加相当大的尺寸。

相关问题