【发布时间】:2014-05-07 17:46:21
【问题描述】:
我继承了一个按搜索词过滤的网格。构建它的人将搜索词添加到模型中,以使它们更容易在整个过程中传递。当搜索词是一个简单的字符串时,一切似乎都可以正常工作,但是将其重构为 List 以考虑多个搜索词。在视图页面上应该显示“searchterms”,但是当它到达控制器时,它不再是正确的值,它显示为“System.Collections.Generic.List`1[System.String]”,不是价值观,这会破坏整个过程的其余部分。从那里我尝试使用从 SO 获得的 Linq 按搜索词过滤列表。如果可以,请告知,并提前致谢。
观点:
<%
var filePath = Model.FullPath;
var searchterms = new List<string>();
searchterms = Model.SearchTrms;
Html.Telerik().Grid<FileModel>()
.Name("DocumentsGrid")
.DataKeys(key => key.Add(x => x.FullPath))
.Columns(columns =>
{
columns.Bound(x => x.FullPath).Format("<input type='checkbox' value='{0}'>").Encoded(false).Width(22).Title("");
...
})
.DataBinding(dataBinding => dataBinding.Ajax()
.Select("MyGridAction", "MyController", new { filePath , searchterms })
)
...
.Render();
%>
模型:
public class FileModel
{
...
public string FullName { get; private set; }
...
public string Description { get; set; }
public List<string> SearchTrms { get; set; }
public IList<FileModel> SubFolders { get; set; }
...
}
控制器:
[GridAction]
public ActionResult MyGridAction(string filePath, List<string> searchterms)
{
...
dbfiles = GetFiles(userName, searchterms);
...
}
public List<File> GetFiles(string userName, List<string> searchterms)
{
using (DBEntities ode = new DBEntities())
{
ode.ContextOptions.LazyLoadingEnabled = false;
List<File> fileset1 = (from p in ode.aspnet_Users
from q in p.Files
where p.UserName == userName
select q).ToList<File>();
List<File> filteredlist = (from f in fileset1
from s in searchterms
where f.Name.Contains(s)
select f).ToList<File>();
return filteredlist;
}
}
如果需要,我很乐意发布更多信息。
【问题讨论】:
-
我希望我了解如何应用任何“可能重复”的响应。
-
@user116923 您能否确认您在哪里看到
"System.Collections.Generic.List1[System.String]"`? -
在视图中,".Select("MyGridAction", "MyController", new { filePath , searchterms })" searchterms 在本地输出窗口中显示正确的值。在控制器中,“public ActionResult MyGridAction(string filePath, List
searchterms)”显示文本“System.Collections.Generic.List1[System.String]”作为searchterms的值
标签: c# linq asp.net-mvc-3 asp.net-ajax