12

我如何通过html.actionlink或使用除表单提交之外的任何其他方法传递整个模型?有什么方法或提示吗?

4

3 回答 3

18

尽管在复杂情况下不建议这样做,但您仍然可以这样做!

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)
{
   ...
}
于 2012-07-22T14:10:38.837 回答
4

不,您不能通过链接或表单传递整个复杂对象。您可以采取几种可能的方法:

  • 将对象的每个单独属性包括为查询字符串参数(或输入字段,如果您使用的是表单),以便默认模型绑定器能够在控制器操作中重建对象
  • 仅传递一个 id 作为查询字符串参数(或输入字段,如果您使用的是表单)并让控制器操作使用此 id 从某个数据存储中检索实际对象
  • 使用会话
于 2012-07-22T06:50:56.133 回答
1

您可以使用 javascript 来检测对链接的点击,序列化表单(或您想要传递的任何数据)并将其附加到您的请求参数中。这应该实现您想要实现的目标......

于 2012-07-22T06:57:28.330 回答