【问题标题】:MVC viewModel and paged resultsMVC viewModel 和分页结果
【发布时间】:2017-01-09 12:48:22
【问题描述】:

我需要将视图模型传递给控制器​​,如下所示。

[HttpPost]
public JsonResult GetSearchResultsJson(SearchCriteria searchCriteria) 
{
}

SearchCriteria 定义为:

public class SearchCriteria
{
    public SearchData searchData { get; set; }
    public SearchMode searchMode { get; set; }
}

SearchMode 在哪里:

public class Searchmode
{
    public int? mode { get; set; }
    public int? pageNumber { get; set; }
    public int? pageSize { get; set; }
}

SearchData 有 61 个属性,用于定义要搜索的项目。

public class SearchData
{
  public string name {get;set;}
  ....
  public int age {get;set;}
}

我使用 jQuery 填充一个对象并将其传递给控制器​​。 .Net 将此对象转换为 SearchCriteria 类型的对象。一切正常,但是当 PagedListPager 控件被渲染时,我如何模拟用于创建对象的 jQuery?

目前我有以下代码:

@Html.PagedListPager(Model.DocumentsPaged, pageNumber => Url.Action("GetSearchResultsJson", XXXXXXXXXXXXXXXXXXXXXXX),pLRO)

而且不知道在标记为 XXXXXXXXXXXXXXXXXXXXXXX 的位中放什么。

在 jQuery 中,我可以修改 SerachMode 对象的 pageNumber 属性,这确实为我提供了正确的页面,但我需要在 Html.PagedListPager 帮助器中更新这个属性。

【问题讨论】:

  • 您需要为每个属性生成一个路由(查询字符串)值 - Url.Action("GetSearchResultsJson", new { searchData.name = xxx, searchData.age = xxx, .... })。请注意,如果您将所有这些属性组合在一个类中,那么假设模型包含属性SearchCriteria Criteria,它可能只是Url.Action("GetSearchResultsJson", Model.Criteria)。但是如果你确实有 61 个属性(加上searchMode 中的 3 个),那么你很有可能会超过查询字符串限制并抛出异常

标签: c# asp.net-mvc viewmodel pagedlist


【解决方案1】:

如示例here 中所述,您可以传递该页面。

我真的建议您克隆示例代码并尝试一下。 可能您还必须添加搜索参数,以防您在服务器端丢失它们。

【讨论】:

  • 谢谢,我现在会调查一下。
  • 顺便说一句,您必须使用 pagenumber 参数扩展您的 SearchCriteria。
【解决方案2】:

您的方法GetSearchResultsJson(SearchCriteria searchCriteria) 被标记为[HttpPost],因此您可以将URL 参数留空并使用Url.Action("GetSearchResultsJson")。 POST 的搜索参数位于请求正文中,而不是 URL。

因为Html.PagedListPager 方法需要一个“页面”参数(假设您使用的是PagedList.Mvc NuGet 包中的方法),您可能希望这样编写搜索函数:

GetSearchResultsJson(int page, int SearchCriteria searchCriteria) 

【讨论】:

    猜你喜欢
    • 2010-09-27
    • 2016-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多