【问题标题】:How can I get the routeValue for an actionlink from a textbox? - asp-net core 2.2如何从文本框中获取 actionlink 的 routeValue? - asp-net 核心 2.2
【发布时间】: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


【解决方案1】:
<script>
$(function () {
    $('#action').click(function () {

        var search = $('#SearchString').val();
        //adding querystring to current URL
        var pageURL = $(location).attr("href") + "?searchString=" + encodeURIComponent(search);
        //reloading current URL with querystring
        window.location.href = pageURL;
   });
});

【讨论】:

  • @niz173 这是你想做的吗?
【解决方案2】:

Asp.net 核心文档已经清楚地解释了如何做:

https://docs.microsoft.com/en-us/aspnet/core/tutorials/first-mvc-app/search?view=aspnetcore-2.2

尝试为您的索引视图指定控制器和操作

<form asp-controller="Events" asp-action="Index" method="get">
<p>
    Title: <input type="text" name="SearchString">
    <input type="submit" value="Filter" />
</p>
</form>

<table class="table">
</table>

【讨论】:

  • 还是同样的问题。如果我想对过滤后的事件进行排序,所有事件都会再次显示
  • @niz173 我无法重现,也不需要使用javascript函数。那么你有没有正确的sortOrdersearchString在行动?参考docs.microsoft.com/en-us/aspnet/core/data/ef-mvc/…
猜你喜欢
  • 2021-06-24
  • 1970-01-01
  • 1970-01-01
  • 2017-04-26
  • 2018-04-16
  • 2011-08-26
  • 2018-04-07
相关资源
最近更新 更多