You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET Core MVC 3.1:传递搜索过滤结果至锚点生成对应PDF

ASP.NET Core MVC 3.1:将搜索值传递到PDF生成接口

问题描述

我有一个展示电影列表的Index视图,已添加搜索文本框,想了解是否有办法将搜索值传递到锚点元素中。该锚点指向一个生成PDF视图的Action,希望传递搜索输入以便基于该输入查询,生成不同的PDF结果。


原始代码

Movies控制器代码

// 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">添加新电影</a>
</p>
<a asp-action="Index">刷新</a>
@* 表格内容省略 *@
<form asp-action="Index" asp-controller="Movies" method="get">
    <p>
        搜索:<input type="text" name="search" placeholder="名称、类型、年份" />
        <input type="submit" value="筛选" />
    </p>
</form>

<a asp-action="GeneratePdf" asp-controller="Movies">生成PDF</a>

解决方案(基于Rotativa 1.2)

修改后的Movies控制器代码

// 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">添加新电影</a>
</p>
<a asp-action="Index">刷新</a>
<form asp-action="Index" asp-controller="Movies" method="get">
    <p>
        搜索:<input type="text" name="search" placeholder="名称、类型、年份" />
        <input type="submit" value="筛选" />
    </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>类型</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">编辑</a> |
                        <a asp-action="Details" asp-route-id="@item.MovieId">详情</a> |
                        <a asp-action="Delete" asp-route-id="@item.MovieId">删除</a>
                    </td>
                </tr>
            }
        </tbody>
    </table>

}
<a asp-action="GeneratePdf" asp-controller="Movies" asp-route-linkedSearch="@ViewData["Search"]">生成PDF</a>

效果说明

修改后,点击「生成PDF」时会自动携带当前的搜索参数,生成对应筛选结果的PDF文件,支持不同搜索条件生成不同内容的PDF。


内容的提问来源于stack exchange,提问作者Anheru Desu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 08:06:50