是否可以在mvc 3中将对象作为路由值传递?

时间:2012-01-20 07:45:30

标签: asp.net-mvc-3 routes

我正在尝试重构我的一些代码,我想知道它是否可能是这样的:

这是我的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是我的班级。

当我在cshtml网站pageMetadata中进行重新分配时是正确的,但当动作调用pageMetadata时,它将变为null。我有些愚蠢的错误或者所有想法都错了吗? 谢谢你的帮助。

3 个答案:

答案 0 :(得分:6)

查询字符串就像字典:{key,value}对。因此,您无法在查询字符串中传递类对象。

但是,你可以做的是传递你的模型对象的id,然后使用该id在服务器上加载你的对象。

现在,你正在做一个错误的想法! : - )

答案 1 :(得分: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)

注意:这会将您的对象属性公开给浏览器,并且可能会根据对象的数量和类型为网页添加大量内容。

答案 2 :(得分:1)