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