在ASP.NET MVC 3中,是否有通过html.actionlink传递整个模型的方法?

13
我怎样通过html.actionlink 或其他方法(除了表单提交)传递整个模型?有什么方法或提示吗?

你尝试使用 ViewData 了吗? - Yasser Shaikh
如果有这样的需要,你可能正在做一些错误的事情。请描述你想要实现什么。 - Dmitry Efimenko
3个回答

17

虽然在复杂情况下这样做并不可取,但你仍然可以这样做!

public class QueryViewModel
{
  public string Search { get; set; }
  public string Category { get; set; }
  public int Page { get; set; }
}

// just for testing
@{
   var queryViewModel = new QueryViewModel
   {
      Search = "routing",
      Category = "mvc",
      Page = 23
   };
}

@Html.ActionLink("Looking for something", "SearchAction", "SearchController"
                  queryViewModel, null);

这将生成一个带有 href 的操作链接,类似于:

/SearchController/SearchAction?Search=routing&Category=mvc&Page=23

这里是您的操作:

public ViewResult SearchAction(QueryViewModel query)
{
   ...
}

谢谢,兄弟。你的建议对我很有帮助,我已经在你的帖子指导下取得了一些进展。 - kiransh
为什么这不可取? - Flexabust Bergson
如果类中有更多的属性,那么URL可能会变得太长,而且还有可能泄露一些敏感信息。 - VJAI

4
不,您无法使用链接或表单传递整个复杂对象。您有几种可能的解决方案:
  • 将对象的每个属性作为查询字符串参数(或输入字段,如果您正在使用表单)包含在内,以便默认模型绑定程序可以在控制器操作中重新构建对象
  • 仅通过id作为查询字符串参数(或输入字段,如果您正在使用表单)传递,并让控制器操作使用此id从某些数据存储中检索实际对象
  • 使用会话

1
您可以使用JavaScript来检测链接的点击事件,序列化表单(或任何要传递的数据),并将其附加到请求参数中。这样就可以实现您想要的效果...

如果可能的话,能否给我提供一个示例?我对JavaScript中的序列化不是很了解。 - kiransh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接