是否有使用POST而不是GET的MVC寻呼机?

这是我的问题。 我有一个SearchViewModel ,它有很多搜索条件,这些值根本不适合URL。 我目前正在使用Troy Goode's Html.PagedListPager ,但它被设计为使用Url.Action()在URL中发送参数。 这是一个例子。 我不认为客户端过滤是一种选择,因为我会有很多记录。

  @Html.PagedListPager( (IPagedList)@Model.SearchResults, page => Url.Action("Results", new { YearBuiltFrom = Model.YearBuiltFrom, } )) } 

如果您只有一个或两个简单参数,这是一个很好的解决方案。

SearchViewModel

  public class SearchViewModel { public int? page { get; set; } public int? size { get; set; } [IgnoreDataMember] public IPagedList SearchResults { get; set; } public string[] Locations { get; set; } [IgnoreDataMember] public MultiSelectList LocationOptions { get; set; } public string[] ZipCodes { get; set; } [IgnoreDataMember] public MultiSelectList ZipCodeOptions { get; set; } [Display(Name="Year Built")] public int? YearBuiltFrom { get; set; } [Display(Name = "Year Built")] public int? YearBuiltTo { get; set; } public int? SqftFrom { get; set; } public int? SqftTo { get; set; } public string Bedrooms { get; set; } public string Bathrooms { get; set; } [DataType(DataType.Date)] public DateTime? SalesFrom { get; set; } [DataType(DataType.Date)] public DateTime? SalesTo { get; set; } public int? SaleAmountFrom { get; set; } public int? SaleAmountTo { get; set; } public int? LandAreaFrom { get; set; } public int? LandAreaTo { get; set; } public string[] Waterfront { get; set; } [IgnoreDataMember] public MultiSelectList WaterfrontOptions { get; set; } //TODO: Implement LandAreaType as a search parameter //public string LandAreaType { get; set; } public Boolean? IsVacant { get; set; } public string[] PropertyFeatures { get; set; } [IgnoreDataMember] public MultiSelectList PropertyFeatureOptions { get; set; } } 

我不熟悉这样的控制。 我认为最简单的方法是使用javascript来劫持寻呼机锚点上的点击,并通过取消锚点引起的默认重定向来动态构建POST请求。 要构建此POST请求,您可以动态地将当前页面值设置为搜索表单的隐藏字段,并触发此表单的提交,以便它再次执行搜索但页面参数已更改。

我们来举个例子: