Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ASP.NET MVC将对象转换为查询字符串,其中对象具有列表属性_C#_Asp.net Mvc_Pagination - Fatal编程技术网

C# ASP.NET MVC将对象转换为查询字符串,其中对象具有列表属性

C# ASP.NET MVC将对象转换为查询字符串,其中对象具有列表属性,c#,asp.net-mvc,pagination,C#,Asp.net Mvc,Pagination,我正在尝试设置搜索结果的分页 我的简化搜索视图模型如下所示: public class SearchModel { public string Category { get; set; } public List<string> Tags { get; set; } } Page=1&Category=Things&Tags=1&Tags=2&Tags=3 这工作正常,搜索结果页面显示匹配值。当然,这是第一页;分页必须在某个

我正在尝试设置搜索结果的分页

我的简化搜索视图模型如下所示:

public class SearchModel
{
      public string Category { get; set; }
      public List<string> Tags { get; set; }
}
Page=1&Category=Things&Tags=1&Tags=2&Tags=3
这工作正常,搜索结果页面显示匹配值。当然,这是第一页;分页必须在某个地方构建,我正在使用Url.Action()将这些页面链接构建到视图中。我试图利用Url.Action()将对象转换为查询字符串。在本例中,我发送Url.Action()进行转换的对象是viewmodel,唯一的更改是每个页面Url的页面属性

但是,当我将搜索模型发送到Url.Action()以转换为查询字符串时,Url.Action()输出对象如下:

Page=1&Category=Things&Tags=System.Collections.Generic.List%601%5BSystem.String%5D
除集合外,所有属性都正确转换。我不明白为什么控制器将对象正确地转换为查询字符串,而Url.Action()方法却不能。请注意,使用数组和IEnumerable没有区别

我正在寻找一种解决方案,将SearchModel对象正确地转换为查询字符串,该查询字符串将匹配控制器生成的内容。对于ASP.NET MVC来说,这似乎不是一件复杂的事情,但到目前为止,我没有发现任何东西表明,如果没有复杂的模型绑定或JavaScript/JSON,这是可能的


非常感谢您的帮助。

如您所想,使用HTTP Get请求进行分页,使用Url.Action(),有一些方法可以做到这一点,总有一种方法,但使用HTTP post请求会更直接

使用HTTP Post请求解决此问题,将当前页面作为表单action=“/mycontroller/myaction”HTML的子级存储在.cshtml视图中的

以下是一个简单的教程:


了解了这种方法之后,您可以开始学习如何使用Ajax进行分页,这样就不会像上面的教程那样进行页面刷新。

因为在内部,
Url.Action()
会根据模型中每个属性的
.ToString()
值生成
RouteValueDictionary
。您不能使用
Url.Action()
传递包含复杂对象或集合的模型。最好的猜测是您有一个带有列表框的表单,并且正在发布到GET方法,并且希望能够在分页时保留标记(和类别)的集合。如果是这样,视图和控制器方法如何才能添加一个显示如何解决此问题的答案。@Biohazard,你找到答案了吗?