我繼承了一個按搜索項過濾的網格。構建它的人員將搜索條件添加到模型中,以使其更容易在整個流程中傳遞。當搜索條件是一個簡單的字符串時,一切似乎都可以正常工作,但將其重構爲列表<>以解決多個搜索條件。在查看頁面上顯示「searchterms」,但當它到達控制器時,它不再是正確的值,它顯示爲「System.Collections.Generic.List`1 [System.String]」,而不是價值觀念,這些價值觀念會影響整個過程的其餘部分。從那裏我嘗試使用我從SO獲得的Linq搜索條件來篩選列表。請告知您是否可以提前致謝。在視圖和控制器之間傳遞List <>作爲參數
的觀點:
<%
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;
}
}
,我會很高興,如果需要發佈更多信息。
可能的重複http://stackoverflow.com/questions/717690/asp-net-mvc-pass-array-object-as-a-route-value-within-html-actionlink –
我希望我明白如何的「可能重複」答覆。 – Darkloki
@ user116923你能確認你在哪裏看到'「System.Collections.Generic.List'1 [System.String]」'? –