C# 选择标记辅助对象以筛选索引

C# 选择标记辅助对象以筛选索引,c#,asp.net,model-view-controller,tag-helpers,C#,Asp.net,Model View Controller,Tag Helpers,我正在尝试使用一个选择标记帮助器来按难度和类型筛选移动列表。到目前为止,我有一个可用的下拉列表,但我不知道如何将所选值重定向到控制器中的index方法 这就是我所拥有的 看法 下拉列表应该将所选值返回到index方法,该方法使用字符串作为过滤器 控制器 方法,该方法创建显示的selectList几乎与“困难列表”相同 我一直在琢磨如何将下拉列表中选定的值作为filter和filter2传递给索引 编辑 我添加了一个表单元素和此按钮: <a asp-controller="Move" asp

我正在尝试使用一个选择标记帮助器来按难度和类型筛选移动列表。到目前为止,我有一个可用的下拉列表,但我不知道如何将所选值重定向到控制器中的index方法

这就是我所拥有的

看法

下拉列表应该将所选值返回到index方法,该方法使用字符串作为过滤器

控制器

方法,该方法创建显示的selectList几乎与“困难列表”相同

我一直在琢磨如何将下拉列表中选定的值作为filter和filter2传递给索引

编辑

我添加了一个表单元素和此按钮:

<a asp-controller="Move" asp-action="Index" asp-route-filter="" asp-route-filter2="" class="btn btn-default">Filter</a>

我不知道如何获取asp路由筛选器中第一个列表的值,以及asp-route-filter2中第二个列表的值。

HTML表单提交的一个核心部分是元素。基于您的问题,我假设您的表单将执行GET而不是POST。我假设这是因为控制器的默认操作是GET。另一个是SUBMIT按钮本身,除非您计划通过javascript或其他方式提交表单

您还缺少asp for=,这是一种填充视图元素的名称和Id的奇特方法。对于您的示例,您将使用filter和filter2作为值。尽管我将来会重构这些名称。Name属性允许模型绑定器将请求的元素绑定到控制器的参数

记住这一点,下面的表单将如下所示:注意添加的表单元素、按钮元素和asp for=


您也可以对这些元素使用@Html.Helpers。那是你的选择。结果是一样的。

我添加了表单元素并添加了类似此筛选器的按钮,但我不知道如何获取asp路由筛选器中第一个列表的值,以及asp-route-filter2I中第二个列表的值我相信您也缺少asp for=我将更新我的答案
    public IActionResult Index(string filter, string filter2)
    {
        IEnumerable<Move> Moves = null;
        if (filter == null && filter2 == null){
            Moves = _MoveRepository.GetAll();
        }
        else if (filter != null && filter2 == null)
        {
            Moves = _MoveRepository.GetByDifficulty(int.Parse(filter));
        }
        else if (filter == null && filter2 != null))
        {
            Moves = _MoveRepository.GetByType(filter);
        }
        else if (filter != null && filter2 != null))
        {
            Moves = _MoveRepository.GetByType(filter).Where(m => m.Difficulty == int.Parse(filter2);
        }
        ViewData["Type"] = GetTypesAsSelectList();
        ViewData["Difficulty"] = GetDifficultiesAsSelectList();
        return View(Moves);
    }
private List<SelectListItem> GetTypesAsSelectList()
{
    List<SelectListItem> TypesList = new List<SelectListItem>();
    foreach (Move move in _MoveRepository.GetAll().Distinct())
    {
        TypesList.Add(new SelectListItem { Text = Move.Type, Value = Move.Type });
    }

    return TypesList;
<a asp-controller="Move" asp-action="Index" asp-route-filter="" asp-route-filter2="" class="btn btn-default">Filter</a>
@model IEnumerable<Taijitan.Models.Domain.Move>
@{
    ViewData["Title"] = "Moves";
}

<h2>@ViewData["Title"]</h2>
<form method="GET">
<div class="form-group">
     //Returns filter1
    <select asp-items="@ViewData["Difficulty"] as List<SelectListItem>" class="form-control" asp-for="filter">
        <option value="">-- Select Difficulty --</option>
    </select>
     //Returns filter2
    <select asp-items="@ViewData["Type"] as List<SelectListItem>" class="form-control" asp-for="filter2">
        <option value="">-- Select Type --</option>
    </select>
    <a asp-controller="Move" asp-action="Index" asp-route-filter="" asp-route-filter2="" class="btn btn-default">Filter</a>
</div>
</form>