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,你找到答案了吗?