Asp.net核心mvc 3.1我有一个索引视图,它显示了一个电影列表,其中我添加了一个搜索文本框,我想知道是否有任何方法将该搜索值传递给锚元素。此锚元素指向生成pdf视图的操作。但是我想把搜索输入传递给一个锚,这样我就可以基于这个输入进行查询,并根据搜索到的输入生成不同的pdf结果.如果你们能帮我我会很感激的..。
MoviesController
// GET: Movies
public async Task<IActionResult> Index(string search)
{
var movies = _context.Movies.Include(m => m.Genre).OrderBy(m=>m.Name);
if (!string.IsNullOrEmpty(search))
{
var query = _context.Movies.Include(m => m.Genre);
var searchedItems = query.Where(m => m.Name.Contains(search) || m.Genre.Name.Contains(search) || m.Year.ToString().Contains(search));
return View(await searchedItems.ToListAsync());
}
return View( await movies.ToListAsync());
}
public IActionResult GeneratePdf(string linkedSearch)
{
var movies = _context.Movies.Include(m => m.Genre).OrderBy(m => m.Name).ToList();
return new ViewAsPdf("GeneratePdf", movies)
{
PageOrientation = Rotativa.AspNetCore.Options.Orientation.Portrait,
PageSize = Rotativa.AspNetCore.Options.Size.A4
};
}index.cshtml
@model IEnumerable<MovieListApp.Models.Movie>
@{
ViewData["Title"] = "Index";
}
<h1>Index</h1>
<p>
<a asp-action="Create">Add new movie</a>
</p>
<a asp-action="Index">Refresh</a>
@* Table Omitted for brevity *@
<form asp-action="Index" asp-controller="Movies" method="get">
<p>
Search:<input type="text" name="search" placeholder="name, Genre, year" />
<input type="submit" value="Filtrar" />
</p>
</form>
<a asp-action="GeneratePdf" asp-controller="Movies">Generate Pdf</a>解决方案值得一提的是,pdf视图是用ROTATIV1.2版本生成的,GeneratePdf操作方法链接到视图.MoviesContrller
// GET: Movies
public async Task<IActionResult> Index(string search)
{
ViewData["Search"] = search;
var movies = _context.Movies.Include(m => m.Genre).OrderBy(m=>m.Name);
if (!string.IsNullOrEmpty(search))
{
var query = _context.Movies.Include(m => m.Genre);
var searchedItems = query.Where(m => m.Name.Contains(search) || m.Genre.Name.Contains(search) || m.Year.ToString().Contains(search));
return View(await searchedItems.ToListAsync());
}
return View( await movies.ToListAsync());
}
public async Task<IActionResult> GeneratePdf(string linkedSearch)
{
var movies = _context.Movies.Include(m => m.Genre).OrderBy(m => m.Name);
if (!string.IsNullOrEmpty(linkedSearch))
{
var query = _context.Movies.Include(m => m.Genre);
var searchedItems = query.Where(m => m.Name.Contains(linkedSearch) || m.Genre.Name.Contains(linkedSearch) || m.Year.ToString().Contains(linkedSearch));
return new ViewAsPdf("GeneratePdf",await searchedItems.ToListAsync())
{
PageOrientation = Rotativa.AspNetCore.Options.Orientation.Portrait,
PageSize = Rotativa.AspNetCore.Options.Size.A4
};
}
return new ViewAsPdf("GeneratePdf", await movies.ToListAsync())
{
PageOrientation = Rotativa.AspNetCore.Options.Orientation.Portrait,
PageSize = Rotativa.AspNetCore.Options.Size.A4
};
}Index.cshtml
@model IEnumerable<MovieListApp.Models.Movie>
@{
ViewData["Title"] = "Index";
}
<h1>Index</h1>
<p>
<a asp-action="Create">Add new movie</a>
</p>
<a asp-action="Index">Refresh</a>
<form asp-action="Index" asp-controller="Movies" method="get">
<p>
Search:<input type="text" name="search" placeholder="name, Genre, year" />
<input type="submit" value="Filtrar" />
</p>
</form>
@{
<table class="table">
<thead>
<tr>
<th>
@Html.DisplayNameFor(model => model.Name)
</th>
<th>
@Html.DisplayNameFor(model => model.Year)
</th>
<th>
@Html.DisplayNameFor(model => model.Rating)
</th>
<th>
<label>Genre</label>>
</th>
<th></th>
</tr>
</thead>
<tbody>
@foreach (var item in Model)
{
<tr>
<td>
@Html.DisplayFor(modelItem => item.Name)
</td>
<td>
@Html.DisplayFor(modelItem => item.Year)
</td>
<td>
@Html.DisplayFor(modelItem => item.Rating)
</td>
<td>
@Html.DisplayFor(modelItem => item.Genre.Name)
</td>
<td>
<a asp-action="Edit" asp-route-id="@item.MovieId">Edit</a> |
<a asp-action="Details" asp-route-id="@item.MovieId">Details</a> |
<a asp-action="Delete" asp-route-id="@item.MovieId">Delete</a>
</td>
</tr>
}
</tbody>
</table>
}
<a asp-action="GeneratePdf" asp-controller="Movies" asp-route-linkedSearch="@ViewData["Search"]">Generate Pdf</a>基于search https://i.stack.imgur.com/wj75M.png的差分pdf
另一个pdf基于另一个搜索 https://i.stack.imgur.com/75MDV.png
发布于 2022-09-02 08:53:48
锚标记助手支持使用asp-route-{value}属性传递查询参数。但是首先,您需要将搜索值传递给视图。为此,您可以使用ViewData字典。
public async Task<IActionResult> Index(string search)
{
// pass the search string to the view so that the anchor can pass it to the GeneratePdf action
ViewData["Search"] = search;
// rest of the code
}然后在视图中:
<a asp-action="GeneratePdf" asp-controller="Movies" asp-route-linkedSearch="@ViewData["Search"]">Generate Pdf</a>https://stackoverflow.com/questions/73579797
复制相似问题