【发布时间】:2019-12-13 15:34:40
【问题描述】:
我想将排序和过滤添加到我的应用程序中。 (我想组织一些活动)当我知道搜索包含“a”的活动并且想要对结果进行排序时,所有结果都会再次显示并排序。
我知道,我必须将 searchString 作为 Actionlink 的 Route 参数传递。但是我该怎么做呢?
我找到了一个使用 Request.Querystring 的解决方案,但它不起作用。 有人告诉我用 JavaScript 来做,所以我试着写一个函数,但它也不起作用。 有谁能够帮我?
摘自我的代码:
动作链接:
<h1>events</h1>
@using (Html.BeginForm())
{
<p>
<lable>events:</lable>
@Html.TextBox("SearchString")
<input type="submit" value="Search" />
</p>
<table class="table">
<thead>
<tr>
<th>
@Html.ActionLink("Titel", "Index", new { sortOrder = ViewBag.NameSortParm}, new { id = action})
</th>
</tr>
</thead>
</table>
JavaScript-函数:
<script>
$(function () {
$('#action').click(function () {
var s = $('#SearchString').val();
this.href = this.href + '?searchString=' + encodeURIComponent(searchString);
});
});
</script >
控制器:
public async Task<IActionResult> Index(string sortOrder, string searchString)
{
ViewBag.NameSortParm = String.IsNullOrEmpty(sortOrder) ? "titel_desc" : "";
var vs = from t in _context.Events select t;
if (!String.IsNullOrEmpty(searchString))
{
vs = vs.Where(s => s.Titel.Contains(searchString));
}
switch (sortOrder)
{
case "titel_desc":
vs = vs.OrderByDescending(m => m.Titel);
break;
default:
vs = vs.OrderBy(m => m.Titel);
break;
}
return View(await vs.ToListAsync());
}
【问题讨论】:
-
您的控制器代码是什么?该操作是否采用 searchString 参数等?
-
@John 我编辑了我的控制器代码。这有帮助吗?
标签: asp.net asp.net-mvc asp.net-core asp.net-core-2.2 actionlink