我正在尝试使索引视图中的表被某些值过滤,为此,我使用了[HttpGet] Index方法,该方法创建了2个selectLists(每种过滤器类型一个)。筛选器按钮应该采用每个列表的选定值,并将它们发送到[HttpPost] Index方法,该方法将筛选表。
问题在于,它在我过滤时不会“重置” URL,因此每次我更改过滤器时,它都会不断添加到URL中。
索引获取(此方法很好)
[HttpGet]
public IActionResult Index()
{
IEnumerable<Lesson> Lessons = _LessonRepository.GetAll();
ViewData["Types"] = GetTypesAsSelectList();
ViewData["Difficulties"] = GetDifficultiesAsSelectList();
return View(Lessons);
}
索引发布(每次我单击视图中的过滤器按钮时,此列表都会不断添加/ Lesson / Index)
[HttpPost]
public IActionResult Index(string filter, string filter2)
{
IEnumerable<Les> Lessons = null;
if (filter == null && filter2 == null)
Lessons = _LessonRepository.GetAll();
else if (filter != null && filter2 == null)
{
Lessons = _LessonRepository.GetByDifficulty(filter);
}
else if (filter == null && filter2 != null)
{
Lessons = _LessonRepository.GetByType(filter2);
}
else if (filter != null && filter2 != null)
{
Lessons = _LessonRepository.GetByType(filter2).Where(l => l.Difficulty == filter);
}
ViewData["Types"] = GetTypesAsSelectList();
ViewData["Difficulties"] = GetDifficultiesAsSelectList();
return View(Lessons);
}
查看
<form action="Lesson/Index/" method="post">
<div class="form-inline">
<select id="difficulties" name="filter" asp-items="@ViewData["Difficulties"] as List<SelectListItem>" class="form-control">
<option value="">-- Select difficulty --</option>
</select>
<select id="types" name="filter2" asp-items="@(ViewData["Types"] as List<SelectListItem>)" class="form-control">
<option value="">-- Select type --</option>
</select>
<button type="submit">Filter</button>
</div>
</form>
答案 0 :(得分:0)
发生这种情况是因为action
标记中的form
属性包含相对URL。请求的结果URL为current url + relative url
,这就是为什么Lesson/Index/
根据请求附加到当前URL的原因。考虑通过在开头添加/
来使用绝对URL
<form action="/Lesson/Index/" method="post">
由于使用的是ASP.NET Core,因此也可以使用asp-action
和asp-controller
<form asp-action="Index" asp-controller="Lesson" method="post">
或者您可以坚持使用相对URL,但是您需要考虑如何构建最终的URL。因此,如果您的表单位于/Lesson/Index
视图上,则可以使用以下操作
<!-- empty action, or you can just remove the attribute completely -->
<form action="" method="post">
这会给您current url + relative url = "/Lesson/Index" + "" = "/Lesson/Index"