13. Add Search in Route Path
Step 1: Update the Index
method found inside Controllers/MoviesController.cs
with the following code:
The updated Index
method with id
parameter:
public async Task<IActionResult> Index(string id)
{
var movies = from m in _context.Movie
select m;
if (!String.IsNullOrEmpty(id))
{
movies = movies.Where(s => s.Title!.Contains(id));
}
return View(await movies.ToListAsync());
}
However, you can't expect users to modify the URL every time they want to search for a movie. So now you'll add UI elements to help them filter movies. If you changed the signature of the Index
method to test how to pass the route-bound ID
parameter, change it back so that it takes a parameter named searchString
:
Step 2: Now change the code to
public async Task<IActionResult> Index(string searchString)
{
var movies = from m in _context.Movie
select m;
if (!String.IsNullOrEmpty(searchString))
{
movies = movies.Where(s => s.Title!.Contains(searchString));
}
return View(await movies.ToListAsync());
}
Open the Views/Movies/Index.cshtml
file, and add the <form>
markup highlighted below:
@model IEnumerable<MvcMovie.Models.Movie>
@{
ViewData["Title"] = "Index";
}
<h2>Index</h2>
<p>
<a asp-action="Create">Create New</a>
</p>
<form asp-controller="Movies" asp-action="Index">
<p>
Title: <input type="text" name="SearchString" />
<input type="submit" value="Filter" />
</p>
</form>
The HTML <form>
tag uses the Form Tag Helper, so when you submit the form, the filter string is posted to the Index
action of the movies controller. Save your changes and then test the filter.

Last updated