0
我正在編寫一個增強的搜索功能,用於收集已有的和已遇到的問題。我試圖在窗體的隱藏字段中存儲List,以便每次用戶發佈窗體時都可以添加List。收集篩選(通過列表<String>查看並返回到控制器)
這裏是我的控制器代碼:
public ActionResult Index(Int32 page = 0, List<String> filters = null, String filter = "", Int32 pageSize = 10, Boolean sortAscending = true, String sortBy = "Title") {
UserContext uc = SecurityHelpers.GetUserData();
LinkedList<SongViewModel> svm = new LinkedList<SongViewModel>();
var songs = _songRepository.FindAll()
.Where(a => a.Title.Contains(filter) ||
a.Lyrics.Contains(filter) ||
a.Description.Contains(filter));
ViewBag.ResultsCount = songs.Count();
ViewBag.Page = page;
ViewBag.PageSize = pageSize;
ViewBag.SortAscending = sortAscending;
if (filters == null) {
filters = new List<String>();
}
filters.Add(filter);
ViewBag.Filters = new JavaScriptSerializer().Serialize(filters);
songs = songs.Sort(sortBy, sortAscending)
.Skip(page * pageSize)
.Take(pageSize);
foreach (Song s in songs) {
((LinkedList<SongViewModel>)svm).AddLast(new SongViewModel(uc.SongWriterId) {
Song = s
});
}
return View("songs", svm);
}
這裏是我的視圖代碼:
<li>
<input type="text" class="textbox" name="filter" />
<input type="hidden" value="@ViewBag.Filters" name="filters" />
</li>
當我提交表單,似乎一切工作,但是,現在ViewBag.Filters包含列表列表?
- 索引操作的第一次運行顯示隱藏字段中的過濾器的值爲[「」]。
- 如果我爲過濾器提交'asdf'的值,我會得到[「[\」\「]」,「asdf」]。
- 如果我再次提交值爲'foo'的過濾器,我會得到[「[\」[\\「\\」] \「,\」asdf \「]」,「foo」]。
有沒有人有任何想法,我做錯了什麼?看來Json解析器將過濾器的值解釋爲列表中的單個元素,我只是不知道如何解決這個問題。任何幫助將不勝感激。