Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.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# 通过列表<&燃气轮机;作为视图和控制器之间的参数_C#_Linq_Asp.net Mvc 3_Asp.net Ajax - Fatal编程技术网

C# 通过列表<&燃气轮机;作为视图和控制器之间的参数

C# 通过列表<&燃气轮机;作为视图和控制器之间的参数,c#,linq,asp.net-mvc-3,asp.net-ajax,C#,Linq,Asp.net Mvc 3,Asp.net Ajax,我继承了一个按搜索词过滤的网格。构建它的人将搜索词添加到模型中,以使它们更容易在整个过程中传递。当搜索词是一个简单的字符串时,一切似乎都正常工作,但要将其重构为一个列表以考虑多个搜索词。在视图页面上,“searchterms”应该显示,但当它到达控制器时,它不再是正确的值,而是显示为“System.Collections.Generic.List`1[System.String]”,而不是这些值,这会破坏进程的其余部分。从那里,我尝试使用从SO获得的Linq,通过搜索词过滤列表。如果可以,请告知

我继承了一个按搜索词过滤的网格。构建它的人将搜索词添加到模型中,以使它们更容易在整个过程中传递。当搜索词是一个简单的字符串时,一切似乎都正常工作,但要将其重构为一个列表以考虑多个搜索词。在视图页面上,“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();
%>
key.Add(x=>x.FullPath))
.列(列=>
{
columns.Bound(x=>x.FullPath).Format(“”).Encoded(false).Width(22).Title(“”);
...
})
.DataBinding(DataBinding=>DataBinding.Ajax()
.Select(“MyGridAction”、“MyController”、新{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; }
       ...

}
公共类文件模型
{
...
公共字符串全名{get;private set;}
...
公共字符串说明{get;set;}
公共列表SearchTrms{get;set;}
公共IList子文件夹{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;
        }
    }
[GridAction]
公共操作结果MyGridAction(字符串文件路径,列表搜索术语)
{
...
dbfiles=GetFiles(用户名、搜索术语);
...
}
公共列表GetFiles(字符串用户名、列表搜索术语)
{
使用(DBEntities ode=newdbentities())
{
ode.ContextOptions.LazyLoadingEnabled=false;
列出fileset1=(来自ode.aspnet_用户中的p)
从p.文件中的q
其中p.UserName==用户名
选择q.ToList();
List filteredlist=(来自文件集1中的f
从搜索词中删除
其中f.Name.包含
选择f).ToList();
返回过滤器列表;
}
}

如果需要的话,我很乐意发布更多信息。

之所以看到
System.Collections.Generic.List'1[System.String]“
是因为这是
listOfStrings.ToString()返回的内容。这就是当您使用匿名类型
new{…}
填充路由值时所调用的

你需要做一些类似的事情

var routeValues = new RouteValueDictionary();

routeValues.Add("filePath", filePath);

for (int i = 0; i < searchTerms.Count(); i++)
{
    var key = String.Format("searchTerms[{0}]", i);
    routeValues.Add(key, searchTerms[i]);
}

// ...

.DataBinding(dataBinding => dataBinding.Ajax()
    .Select("MyGridAction", "MyController", routeValues)) 
// don't have a compiler with me so this may be the wrong overload

// ...
var routeValues=new RouteValueDictionary();
添加(“文件路径”,文件路径);
for(int i=0;iDataBinding.Ajax()
.选择(“MyGridAction”、“MyController”、RouteValue))
//我身上没有编译器,所以这可能是错误的重载
// ...
这意味着每个项目都有自己的键,因此模型绑定器可以很好地使用它


有关详细信息,请阅读。

可能重复的我希望我了解任何“可能重复”响应是如何应用的。@user116923请确认您在视图中看到的
“System.Collections.Generic.List
1[System.String]”`?选择(“MyGridAction”,“MyController”,new{filePath,searchterms})searchterms在本地输出窗口中显示正确的值。在控制器中,“public ActionResult MyGridAction(string filePath,List searchterms)”显示文本“System.Collections.Generic.List1[System.string]”作为searchterms的值我不太理解Scott Hanselman的文章,但这很有效,而且似乎很有意义。塔克斯!